Slim Framework - 来自 json 的多个 PDO 更新
Slim Framework - Multiple PDO updates from json
我尝试使用 Slim 框架在 json 放置请求中执行多个插入,但我收到一个奇怪的错误:
SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: 'Chester'
即使名称是 VARCHAR。它在 $sth->execute 行出错。如果我只使用一个条目,它有时会起作用。这是 JSON
[{"id":"2240","name":"Cheats","breed": "Maltys"},
{"id":"2241","name":"Chester","breed":"Poodlexx"}]
代码:
$app->put('/test2', function ($request, $response, $args) {
$parsedBody = $request->getParsedBody();
print_r ($parsedBody);
foreach ($parsedBody as $key => &$value) {
if (!isset($value['id'])) { continue; }
$sql = "UPDATE pets p SET";
foreach ($value as $p_key => &$p_value) {
if ($p_key !== 'id') { //ignore the id
$sql .= " $p_key = :$p_key AND";
}
}
$sql = preg_replace('/AND$/', '', $sql)." WHERE p.id = :id";
//echo "\n$sql";
$sth = $this->db->prepare($sql);
foreach ($value as $p_key => &$p_value) {
//echo "\n$p_key:$p_value";
$sth->bindParam($p_key, $p_value);
}
$sth->debugDumpParams();
$sth->execute();
}
return;
});
DumpParams 的输出:
SQL: [67] UPDATE pets p SET name = :name AND breed = :breed WHERE p.id = :id
Doh,经过 2 小时的敲击我的脑袋,这是一个不正确的 SQL 语句应该是逗号而不是 AND:
foreach ($value as $p_key => &$p_value) {
if ($p_key !== 'id') { //ignore the id
$sql .= " $p_key = :$p_key,";
}
}
$sql = preg_replace('/,$/', '', $sql)." WHERE p.id = :id";
我尝试使用 Slim 框架在 json 放置请求中执行多个插入,但我收到一个奇怪的错误:
SQLSTATE[22007]: Invalid datetime format: 1292 Truncated incorrect DOUBLE value: 'Chester'
即使名称是 VARCHAR。它在 $sth->execute 行出错。如果我只使用一个条目,它有时会起作用。这是 JSON
[{"id":"2240","name":"Cheats","breed": "Maltys"},
{"id":"2241","name":"Chester","breed":"Poodlexx"}]
代码:
$app->put('/test2', function ($request, $response, $args) {
$parsedBody = $request->getParsedBody();
print_r ($parsedBody);
foreach ($parsedBody as $key => &$value) {
if (!isset($value['id'])) { continue; }
$sql = "UPDATE pets p SET";
foreach ($value as $p_key => &$p_value) {
if ($p_key !== 'id') { //ignore the id
$sql .= " $p_key = :$p_key AND";
}
}
$sql = preg_replace('/AND$/', '', $sql)." WHERE p.id = :id";
//echo "\n$sql";
$sth = $this->db->prepare($sql);
foreach ($value as $p_key => &$p_value) {
//echo "\n$p_key:$p_value";
$sth->bindParam($p_key, $p_value);
}
$sth->debugDumpParams();
$sth->execute();
}
return;
});
DumpParams 的输出:
SQL: [67] UPDATE pets p SET name = :name AND breed = :breed WHERE p.id = :id
Doh,经过 2 小时的敲击我的脑袋,这是一个不正确的 SQL 语句应该是逗号而不是 AND:
foreach ($value as $p_key => &$p_value) {
if ($p_key !== 'id') { //ignore the id
$sql .= " $p_key = :$p_key,";
}
}
$sql = preg_replace('/,$/', '', $sql)." WHERE p.id = :id";