PHP红豆MySQLgetAll()中的多值绑定求值

PHP Red Bean MySQL multi-value binding evaluation in getAll()

我在 php 中有一个包含字符串的数组,我想按以下方式在 Red Bean MySQL 的查询中使用它:

$someString = '\'abc\',\'def\',\'ghi\'';
R::getAll("select * from table where name not in (:list)", array(':list'=> $someString));

问题是无论我如何设置数组字符串中的值,列表都没有被正确计算,结果返回名称 abc、def、ghi。我试过以下方法:

$someString = '\'abc\',\'def\',\'ghi\''
$someString = 'abc\',\'def\',\'ghi'
$someString = 'abc,def,ghi'

运行 SQL 服务器中的查询手动工作,我没有返回这些值,但是 运行 它在 php 代码中与 redbean 是不工作,似乎列表没有在语法方面被正确解释。 谁能解释一下这个问题?

感谢 RyanVincent 的评论,我设法在查询中使用位置参数解决了这个问题,或者更具体地说,R::genSlots 函数。

替换了以下内容:

$someString = '\'abc\',\'def\',\'ghi\'';
R::getAll("select * from table where name not in (:list)", array(':list'=> $someString));

与:

$someArray = array('abc', 'def', 'ghi');
R::getAll("select * from table where name not in (". R::genSlots($someArray) .")", $someArray);

这为查询中的参数创建了一个 $someArray 长度位置,然后用传递给 getAll 函数的第二个参数中的值填充这些位置。 请注意,在这种情况下,我使用了一组内容数组(3 个变量),但它可以动态地处理您将使用的任何长度数组。

此外,这也适用于查询中的多个位置,例如:

$surnameArray = array('smith');
$arr1 = array('john', 'pete');
$arr2 = array('lucy', 'debra');

$mergedVarsArray = array_merge($surnameArray,$arr1);
$mergedVarsArray = array_merge($mergedVarsArray,$arr2);

R::getAll("select * from table where surname != ? and name in (." R::genSlots($arr1).") and name not in (". R::genSlots($arr2) .")", $mergedVarsArray);

此代码将有效地转换为:

select * from table where surname != 'smith' and name in ('john','pete') and name not in ('lucy', 'debra')

每个'?'放置在查询中(或由 genSlots() 动态生成)将被作为参数传递给查询的数组中的相关定位项替换。

希望这能向某些人阐明用法,因为在我得到帮助之前我不知道如何做到这一点。