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;
, это сработало бы.
Но вы присвоили новое значение всему массиву . В результате теперь он содержит не ссылку, а новое значение.
Сказанное выше можно проиллюстрировать с помощью простого кода
Как видите, до тех пор, пока вы сохраняете оригинальный элемент массива, ссылка остается.
Но как только вы присваиваете новое значение всему массиву, ссылка исчезает!
Но оно ушло только из массива, а не из функции. Там он все еще указывает на это нечетное значение &NULL
. Вот почему вы не можете получить какой-либо результат.