【问题标题】:PHP prepared statement not working [closed]PHP准备好的语句不起作用[关闭]
【发布时间】:2012-06-07 11:13:05
【问题描述】:
<?php
    $current = 0;
    $results = 5;
    $statement = $db->prepare("SELECT title, id FROM mytable LIMIT ?, ?");
    $statement->execute(array($current, $results));
?>

var_dump($statement);
=> public 'queryString' => string 'SELECT title, id FROM mytable LIMIT ?, ?' (length=39)

谁能帮我找出为什么这不起作用?

【问题讨论】:

  • 问号不会被 $current 和 $results 替换,因此查询返回 false
  • @RepWhoringPeeHaa - 谢谢。完全错过了标签。和往常一样,学到了一些东西。谢谢!

标签: php mysql pdo


【解决方案1】:

您需要将这些参数绑定为整数,而不是字符串(默认)。将参数绑定为字符串会自动在它们周围添加引号。

$statement->bindParam(":current", $current, PDO::PARAM_INT)

此示例使用命名占位符。我建议您无论如何都使用它。

【讨论】:

    【解决方案2】:

    让您看到占位符被提供的值替换的字符串不是 pdo 提供的功能。但是,它会使用您的值正确执行准备好的语句。

    对于 pdos mysql 驱动程序,如果在值数组上使用 execute(),则在为部分限制子句绑定值时有一个特殊性。见How can I pass an array of PDO parameters yet still specify their types?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 2015-10-11
      • 2011-11-10
      • 2014-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多