【发布时间】:2012-01-08 04:04:29
【问题描述】:
我正在使用准备好的语句将表单中的值插入到 Db 中,其中一些值是负数。
# 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;");
已采取的故障排除步骤:
• 我从表单中回显了POSTed 值,而负数返回负数。
• 我将prepare() 中的语句复制到CLI 中,并手动将负值插入到prepare 插入正值的同一列中:UPDATE db.dbt SET opinion = '-1' WHERE key = '10101';(实际SQL 中存在刻度标记)
^ 这有效。
• 我在执行准备好的语句时打印了它们,我注意到这些值没有用引号括起来。 我认为这就是问题所在。
我读到值不应该在prepare() 中引用,所以我想不出还有什么可做的……
编辑: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
【问题讨论】:
-
@Pekka:SMALLINT(4)。我认为这可能是字段类型问题,但我认为在 CLI 中手动运行 SQL 时我会看到同样的问题(因此不会成功插入负数)。
标签: php numbers prepared-statement negative-number