【问题标题】:php pdo: prepare() negatives become positivephp pdo:prepare() 负数变为正数
【发布时间】: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


【解决方案1】:

如果您使用的是 PDO:-

$sth->bindParam(':value', $opinion, PDO::PARAM_INT);

bindParam 的默认数据类型是PDO::PARAM_STR

【讨论】:

  • 有没有办法更动态地做到这一点? (并非所有值都是整数,prepare 处于循环中)。
  • 将其添加到问题中。谢谢!
  • 嗯,没那么难,换两行bindParam再测试一下
  • 如果我将PDO::PARAM_STR 添加到绑定中,那不会错误识别表单其余部分中的非整数值吗?
  • 仔细阅读,要求设置为PDO::PARAM_INT,而默认数据类型为PDO::PARAM_STR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 2010-10-04
  • 2016-04-23
  • 2022-11-25
  • 2016-04-11
  • 1970-01-01
相关资源
最近更新 更多