我有这个准备好的声明:
$stmt = $dbh->prepare("select * from t where name like :name ");
这样的绑定有效:
$p = "%glas%";
$stmt->bindParam(':name', $p );
如果我将术语置于术语中,则失败:
$stmt->bindParam(':name', "%glas%" );
有什么区别?
答案 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()时进行计算。