Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在数组中循环会返回不同的SQL结果,具体取决于代码_Php_Arrays_Pdo_Foreach - Fatal编程技术网

Php 在数组中循环会返回不同的SQL结果,具体取决于代码

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-&

我正在将(键、值)转换为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->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你可能也在一些问题上击败了我!:你们两个都很棒