Php 在数组中循环会返回不同的SQL结果,具体取决于代码
我正在将(键、值)转换为PDO select搜索,但我发现了一个奇怪的行为 这项工作:Php 在数组中循环会返回不同的SQL结果,具体取决于代码,php,arrays,pdo,foreach,Php,Arrays,Pdo,Foreach,我正在将(键、值)转换为PDO select搜索,但我发现了一个奇怪的行为 这项工作: $statement = $this->handler->prepare("SELECT * FROM $table WHERE pid=:pid AND section=:section"); foreach ($data as $key => $value) $statement->bindParam(":$key", $data[$key]); $statement-&
$statement = $this->handler->prepare("SELECT * FROM $table WHERE pid=:pid AND section=:section");
foreach ($data as $key => $value)
$statement->bindParam(":$key", $data[$key]);
$statement->execute();
debug($statement->fetchAll(PDO::FETCH_ASSOC));
但是当我将循环中的函数改为这个时,它不起作用
foreach ($data as $key => $value)
$statement->bindParam(":$key", $value);
即使
$value==$data[$key]
为真,第二个代码也不会返回正确的结果。为什么?它不起作用的原因是您正在将参数绑定到不断变化的$value
如果您这样做:
$value = 5;
$statement->bindParam(":$key", $value);
$value = 10;
然后将在查询中发送10
相反,您要做的是绑定值而不是参数:
foreach ($data as $key => $value)
$statement->bindValue(":$key", $value);
它不起作用的原因是您正在将参数绑定到不断变化的
$value
如果您这样做:
$value = 5;
$statement->bindParam(":$key", $value);
$value = 10;
然后将在查询中发送10
相反,您要做的是绑定值而不是参数:
foreach ($data as $key => $value)
$statement->bindValue(":$key", $value);
妈的,我离得太近了。我记得bindParam是通过引用绑定的,而不是通过值绑定的,但我不知道该说些什么。@Daedalus你可能也在一些问题上击败了我!:你们两个都很了不起,我离他们很近。我记得bindParam是通过引用绑定的,而不是通过值绑定的,但我不知道该说些什么。@Daedalus你可能也在一些问题上击败了我!:你们两个都很棒