Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 为什么MySQLi编写的语句不';如果我通过数组索引传递参数,则无法工作?_Php_Mysqli_Prepared Statement_Bindparam - Fatal编程技术网

Php 为什么MySQLi编写的语句不';如果我通过数组索引传递参数,则无法工作?

Php 为什么MySQLi编写的语句不';如果我通过数组索引传递参数,则无法工作?,php,mysqli,prepared-statement,bindparam,Php,Mysqli,Prepared Statement,Bindparam,为什么不返回MySQL行: $sql = $conn -> prepare("select * from table where id = ?"); $sql -> bind_param('i', $array[0]); $array = array(1); $sql -> execute(); 但是,当我将数组放在bind_param之前时,它正在工作。它的工作原理如下: $sql = $conn -> prepare("select * from table whe

为什么不返回MySQL行:

$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);
$array = array(1);
$sql -> execute();
但是,当我将数组放在
bind_param
之前时,它正在工作。它的工作原理如下:

$sql = $conn -> prepare("select * from table where id = ?");
$array = array(1);
$sql -> bind_param('i', $array[0]);
$sql -> execute();


在评论中分享了我的想法

$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);// undefined since $array is not yet defined
$array = array(1);// you've just defined it here
$sql -> execute();
希望这有帮助


如果有什么不清楚的,请告诉我

mysqli_语句::bind_参数($types,&$var1)
通过引用接受变量。因此,它旨在处理尚未定义的变量

通常你可以这样做

$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $i);
$i = 1;
$sql -> execute();
而且它将完美无瑕地工作

然而,数组是另一回事。正如注释中提到的my@mario一样,引用未声明的变量会自动定义它。因此,当您引用一个变量时(在这里,
$sql->bind_param('i',$array[0]);
实际上就是这样做的),将同时创建
$array
$array[0]
。其中,
$array[0]
是一个参考

您是否为该变量赋值,即
$array[0]=1,它会工作的。
但是您为整个数组指定了一个全新的值。因此,它现在不包含引用,而是包含一个新值

以上可以用一个例子来说明

如您所见,只要保留原始数组成员,引用就会保留。
但是,一旦为整个数组指定了一个全新的值,引用就消失了


但它只从数组中消失,而不是从函数中消失。它仍然指向那个奇怪的
&NULL
值。这就是为什么你不能得到任何结果

你会得到一个关于未定义数组索引的通知,因为它是:尚未定义。@mario@YourCommonSense好的。对于当前的PHP版本,没有警告。不过,OP可能不需要与变量引用及其自动创建混淆。让我们只保留未定义和覆盖的值。bind_param通过引用接受变量,因此您的答案无法解释任何内容
$sql = $conn -> prepare("select * from table where id = ?");
$array = array(1);// you have defined it first
$sql -> bind_param('i', $array[0]);// PHP will know $array, since you've defined it in the row above
$sql -> execute();
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $i);
$i = 1;
$sql -> execute();