php - 如果我通过数组索引传递参数,为什么 MySQLi 准备好的语句不起作用?
问题描述
为什么这不返回任何 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();
解决方案
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
值。这就是为什么你不能得到任何结果。
推荐阅读
- java - Java 8 将 Int 与空值进行比较
- python - 未在数据框 python 中创建新年龄列
- javascript - 如何使用js将表单数据发送到isset函数
- mysql - 如何在 MySQL 中实现 schema.prisma @reference(fields:...)?
- python - 设置函数和十进制数
- docker - 在 synapse docker 上运行初始生成时,如何指定应保存 homerserver.yaml 的位置?
- python - 使用python实现二叉搜索树
- python - Python:在不使用 .append() 的情况下为子列表分配多个值?
- c# - ReshSharp - 请求返回不同的响应
- html - 如何为我的网站创建临时链接?