PDO准备声明问题

时间:2014-01-02 21:33:48

标签: php pdo prepared-statement

我有这个准备好的声明:

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

这样的绑定有效:

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

如果我将术语置于术语中,则失败:

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

有什么区别?

1 个答案:

答案 0 :(得分:3)

如果您bindParam mixed &$variable

  

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

您会注意到它需要{{1}},这意味着它需要地址。传递文字字符串时,它不会像常规变量一样存储地址。

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

  

与PDOStatement :: bindValue()不同,变量被绑定为引用,并且仅在调用PDOStatement :: execute()时进行计算。