我正在使用一个准备好的语句将值从表单插入到数据库中,其中一些值是负的。
# html
<input type="radio" name="opinion" value='-2' />
<input type="radio" name="opinion" value='-1' />
<input type="radio" name="opinion" value='0' />
<input type="radio" name="opinion" value='1' />
<input type="radio" name="opinion" value='2' />
# prepare
prepare("UPDATE $db.$dbt SET $question = :value WHERE `key` = :key;");
已采取的故障排除步骤:
•我从表单中响应POST
ed值,负号返回负值。
•我将prepare()
中的语句复制到CLI中,并手动将负值插入到准备插入正值的同一列中:
UPDATE db.dbt SET opinion = '-1' WHERE key = '10101';
(实际SQL中存在的标记)
^这是有效的。
•我在执行准备好的语句时打印了它们,我注意到值没有括在引号中。我想这就是问题的来源。
我读到值不应该在prepare()
中引用,所以我想不出还有什么可以做的…
EDIT: prepare()
在循环内
foreach ( $pairs as $pair ) {
list($question , $answer) = explode('=', $pair);
try {
$record_data = $dbh->prepare("UPDATE $db.$dbt SET $question = :value WHERE `key` = :key;");
$record_data->bindParam(':value', $answer);
$record_data->bindParam(':key', $key);
$record_data->execute();
} catch(PDOException $e){};
} // end foreach
如果使用PDO:-
$sth->bindParam(':value', $opinion, PDO::PARAM_INT);
bindParam的默认数据类型是PDO::PARAM_STR