这来自phpdelusions.net:
如果查询中有其他占位符,可以使用 array_merge()
函数将所有变量联接到一个数组中,并按它们在查询中的显示顺序以数组的形式添加其他变量:“
$arr = [1,2,3];
$in = str_repeat('?,', count($arr) - 1) . '?';
$sql = "SELECT * FROM table WHERE foo=? AND column IN ($in) AND bar=? AND baz=?";
$stm = $db->prepare($sql);
$params = array_merge([$foo], $arr, [$bar, $baz]);
$stm->execute($params);
$data = $stm->fetchAll();
查询中的占位符如何Map到合并的 $params
阵列?名字是什么 foo
, bar
, baz
用作 $params
数组并将其Map到占位符?
1条答案
按热度按时间yshpjwxd1#
不。
$params
会有数字键。从手册(我的重点):如果输入数组具有相同的字符串键,则该键的后一个值将覆盖前一个值。但是,如果数组包含数字键,则后面的值将不会覆盖原始值,而是附加在后面。
你的论点
array_merge()
没有字符串键:由于这些是数字键,因此将附加值并
$params
最终会变成这样:这些值将按该顺序传递到查询中的占位符中,因此如果移动查询的条件,还需要更改
array_merge()
以确保值的顺序相同。例如,如果移动
bar=?
条件并将查询更改为:那你就得搬家了
$bar
同时重视并改变你的想法array_merge()
成为: