我有一些基于表单中的用户输入创建MySQL查询的方法(它是PHP Nette Framework语法,但它对这个问题并不重要)。 如何调用数据库查询的语法正确
$query = "SELECT * FROM candidates WHERE firstname = ? AND surname = ?";
return $this->db->queryArgs($query, ['Dante', 'Hickman']);
但是你可以看到这是硬编码的,所以与表格无关。 对于真实的表单,我创建了另一种收集数据的方法,我只是称之为:
$builder = $this->buildSearchQuery($searchParams);
并且在此$builder
转储之后
array(3)
0 => "SELECT * FROM candidates WHERE firstname = ? AND surname = ?" (60)
1 => array (2)
0 => "Dante" (5)
1 => "Hickman" (7)
2 => 2
这些数据是正确的,它基于我插入到输入的内容,因此方法buildSearchQuery()没有问题
但是让我们来描述一下这个数组:
array[0]
是基于输入的占位符查询字符串,array[1][0]
和array[1][1]
是用户填充输入的实际数据(或文本)。
并且array[2]
是填写的输入数量。
我确定您已经注意到可以更改输入数量,
5个输入的buildSearchQuery()
方法将返回如下内容:
0 => "SELECT * FROM candidates WHERE firstname = ? AND surname = ? AND favourite = ? AND notFavourite = ? AND random = ?" (60)
1 => array (5)
0 => "Dante" (5)
1 => "Hickman" (7)
2 => "Pokemon" (7)
3 => "Digimon" (7)
4 => "1122334" (7)
2 => 5
正如您所看到的,关于部分"查询"部分buildSearchQuery()
已经返回正确的值,问题在于存储在array[1]
中的值,我不确定如何进行此操作以使$查询如下:
return $this->db->queryArgs($builder[0], [$builder[1][0], $builder[1][1]]);
具有动态数组。
有人可以帮我这个吗? 感谢
答案 0 :(得分:1)
由于$builder
的第二个元素已经是一个数组,你可以直接将它作为参数传递给函数:
return $this->db->queryArgs($builder[0], $builder[1]);