Erro ao inserir com PDO
Usando Silex e PDO, via post "aceito" o seguinte formato:
{
"softwares": [{
"server": "srvteste13",
"binary": "phantomjs",
"software": "phantomjs",
"daemon": "phantomjs.d",
"path": "/usr/bin",
"version": "1.0"
}, {
"server": "srvteste13",
"binary": "teste2",
"software": "teste2",
"daemon": "teste2.d",
"path": "/var/www/teste2",
"version": "2.0"
}, {
"server": "srvteste13",
"binary": "php",
"software": "php",
"daemon": "php.d",
"path": "/usr/bin",
"version": "5.6"
}, {
"server": "srvteste13",
"binary": "HTTP",
"software": "APACHE HTTP",
"daemon": "HTTP.d",
"path": "/usr/bin/apache2",
"version": "2.0"
}, {
"server": "srvteste13",
"binary": "phantomjs",
"software": "phantomjs",
"daemon": "phantomjs.d",
"path": "/bin",
"version": "2.38"
}, {
"server": "srvteste13",
"binary": "DANIEL",
"software": "DANIEL",
"daemon": "DANIEL",
"path": "DANIEL",
"version": "DANIEL"
}]
}
No bd, há uma relação entre tabela por isso o insert com select, segue:
$app->post('/softwares', function(Request $request) use ($app, $dbh) {
$data = json_decode($request->getContent(), true);
if(isset($data['softwares'])){
$sth = $dbh->prepare("INSERT INTO softwares(HARDWARE_ID, PUBLISHER, NAME, VERSION, FOLDER, COMMENTS, FILENAME, FILESIZE, SOURCE, GUID, LANGUAGE, INSTALLDATE, BITSWIDTH) SELECT id, NULL, :software, :version, :path, NULL, :binary, NULL, NULL, NULL, NULL, NULL, NULL FROM hardware where hardware.name = :server");
for($i=0; $i < sizeof($data['softwares']); $i++){
$sth->execute($data['softwares'][$i]);
$id = $dbh->lastInsertId();
}
// response, 201 created
$response = new Response('Ok', 201);
$response->headers->set('Location', "/softwares");
return $response;
}else{
$response = array("status" => 400, "code" => 400, "message" => "invalid json format");
return new Response(json_encode($response), 400);
}
});
Se eu der um print_r em $data['softwares'] está assim:
Array
(
[softwares] => Array
(
[0] => Array
(
[server] => srvteste13
[binary] => phantomjs
[software] => phantomjs
[daemon] => phantomjs.d
[path] => /usr/bin
[version] => 1.0
)
[1] => Array
(
[server] => srvteste13
[binary] => teste2
[software] => teste2
[daemon] => teste2.d
[path] => /var/www/teste2
[version] => 2.0
)
[2] => Array
(
[server] => srvteste13
[binary] => php
[software] => php
[daemon] => php.d
[path] => /usr/bin
[version] => 5.6
)
[3] => Array
(
[server] => srvteste13
[binary] => HTTP
[software] => APACHE HTTP
[daemon] => HTTP.d
[path] => /usr/bin/apache2
[version] => 2.0
)
[4] => Array
(
[server] => srvteste13
[binary] => phantomjs
[software] => phantomjs
[daemon] => phantomjs.d
[path] => /bin
[version] => 2.38
)
[5] => Array
(
[server] => srvteste13
[binary] => DANIEL
[software] => DANIEL
[daemon] => DANIEL
[path] => DANIEL
[version] => DANIEL
)
)
)
o erro(warning, não erro, porém não insere) que me retorna é:
Warning</b>: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens.
Retorna 6 linhas com esta mensagem, devido ao loop do indice do array enviado via rest.
Já estou a tempos tentando achar o problema e nada, agradeço aos que puderem me dar uma luz.
Discussão (3)
Carregando comentários...