当"value"是varchar(数据库列类型设置为->varchar(255))(如"Bush"或"Obama")时,这个带有PDO execute语句的foreach(请参阅最后一段代码)非常有效:
Array
(
[0] => Array
(
[recid] => 1
[lname] => Bush
)
[1] => Array
(
[recid] => 2
[lname] => Obama
)
)
但是,当"value"得到一个像"58"或"65"这样的数字(数据库列类型设置为->int(11))时,UPDATE语句将失败,并且不会向数据库更新任何内容。
Array
(
[0] => Array
(
[recid] => 1
[age] => 58
)
[1] => Array
(
[recid] => 2
[age] => 65
)
)
获取$_POST数组和PDO执行语句的代码:
foreach ($_POST['changed'] as $SubArray) {
foreach ($SubArray as $key => $value) {
if ($key === 'recid') continue;
$sql = "UPDATE clients SET $key = :value WHERE id = :recid";
$STH = $DBH->prepare($sql);
try {
$STH->execute(array(':value' => $value, ':recid' => $SubArray['recid']));
} catch (PDOException $e) {
$code = $e->getCode();
$file = $e->getFile();
$line = $e->getLine();
$msg = $e->getMessage();
echo "$file:$line ERRNO:$code ERROR:$msg";
}
}
}
如何修复数据库更新的问题?
还有这个问题-问题是缺少backtick。
像这样设置查询($sql)就可以了。
$sql = "UPDATE `clients` SET `$key` = :value WHERE id = :recid";
表和列名前后使用回溯
`