为什么这不返回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();
或
$array = array(1);
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $array[0]);
$sql -> execute();
答案 0 :(得分:1)
mysqli_statement::bind_param($types, &$var1)
通过引用接受变量。因此,旨在处理尚未定义的变量。
通常您可以这样做
$sql = $conn -> prepare("select * from table where id = ?");
$sql -> bind_param('i', $i);
$i = 1;
$sql -> execute();
它将完美无缺。
但是,数组是另一回事。就像在注释中指出了我的@mario一样,引用未声明的变量会自动对其进行定义。因此,当您引用变量时(在这里$sql->bind_param('i', $array[0]);
上您正在有效地执行它),将同时创建$array
和$array[0]
。其中$array[0]
是参考。
如果您为此变量分配了一个值,即$array[0] = 1;
,那么它就会起作用。
但是您为整个数组分配了全新的价值。结果,它现在不包含引用,而是一个新值。
以上可以用simple code snippet
进行说明。如您所见,只要保留原始数组成员,引用就会保留。
但是,一旦您为整个数组分配了一个全新的值,引用就消失了!
但是它仅从数组中消失,而没有从函数中消失。那里仍然指向那个奇数&NULL
。这就是为什么您无法获得任何结果的原因。
答案 1 :(得分:-2)
在评论中分享了我的想法
$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();
$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();
希望这会有所帮助!
如果有不清楚的地方,请告诉我!