【问题标题】:PDO Prepared Statement Issue [duplicate]PDO 准备好的声明问题 [重复]
【发布时间】:2014-01-20 10:55:01
【问题描述】:

我有这个准备好的声明:

$stmt = $dbh->prepare("select * from t where name like :name ");

这样的绑定有效:

$p = "%glas%";
$stmt->bindParam(':name', $p );

如果我直接输入这个词,它会失败:

$stmt->bindParam(':name', "%glas%" );

有什么区别?

【问题讨论】:

  • "%glas%" 不是变量 - 它不能绑定到它。
  • 为此,有bindValue()
  • 您也可以简单地将一组值传递给execute(),这对左值变量和常量值都有效。我总是很困惑为什么人们似乎认为他们需要使用 PDO 绑定参数 () 或绑定值 ()。

标签: php pdo prepared-statement


【解决方案1】:

如果你look at the method definitionbindParam

public bool PDOStatement::bindParam (mixed $parameter , mixed &$variable [, int $data_type = PDO::PARAM_STR [, int $length [, mixed $driver_options ]]] )

您会注意到它需要mixed &$variable,这意味着它需要一个地址。当您传递文字字符串时,它不会像传统变量那样与地址一起存储。

文档中也讨论了地址要求的原因:

与 PDOStatement::bindValue() 不同,该变量被绑定为引用,并且只会在调用 PDOStatement::execute() 时进行评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2012-11-04
    • 2011-06-02
    • 2018-02-20
    • 2013-10-26
    相关资源
    最近更新 更多