当前位置: 首页 > 知识库问答 >
问题:

PHP红豆MySQL多值绑定在getAll()中的计算

欧阳晗日
2023-03-14

我在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 server中手动运行查询是正常的,并且我不会得到返回的值,但是在使用redbean的php代码中运行查询是不正常的,并且看起来列表没有得到正确的语法解释。谁能对这件事说点什么吗?

共有1个答案

籍利
2023-03-14

由于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函数的第二个参数中的值填充这些位置。注意,在本例中,我使用了一个set content数组(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()动态生成的)将被作为参数传递给查询的数组中的相关定位项所替换。

希望这能让一些人明白这个用法,因为在我得到帮助之前,我不知道该怎么做。

 类似资料:
  • 问题内容: 有没有一种简单的方法就可以在PDO中绑定多个值而无需重新分配?看下面的代码: 在这里,我以重复的方式将值绑定了4次。那么,有没有一种简单的方法可以在PDO中绑定多个值? 问题答案: 只要您可以将值视为(字符串),就可以始终将其绑定在参数中。 您可以像任何数组一样使用传递的数组:

  • 问题内容: 我编写了一个脚本,该脚本在用户每次登录我们域中的计算机时运行。此脚本记录用户以及他们登录的计算机。任意数量的用户可以登录任意数量的计算机。 我只是从一个不在的顾问那里继承了这个IT环境,并且正在编写这个小查询,因此当接到用户的呼叫时,我可以按该用户的名字进行搜索,并合理地预测该用户正在使用的计算机。他们登录到任何给定计算机的次数。 这是“登录”表中数据的示例: 我要敲定的逻辑是跨多个列

  • 是否可以将JavaFX滑块中的双精度值绑定到标签?我想得到这样的东西: 谢谢你的帮助。

  • 问题内容: 如何计算值等于常数的数组中元素的数量?例, 我怎么才能直接知道里面有多少“本”? 问题答案:

  • 问题内容: 内容: 我们有一个PHP / MySQL应用程序。 计算的某些部分直接在SQL中完成。例如:最近24小时内创建的所有用户都将通过SQL查询返回(NOW()– 1天) 我和其他开发人员之间正在进行辩论,我认为我们应该这样做: A.将所有计算/代码/逻辑保存在PHP中,并将MySQL视为“愚蠢的”信息存储库 他的意见: B.根据更简单/更快的方式进行混合搭配。http://www.onex

  • 问题内容: 我试图根据条件计算某个值在多维数组中出现的次数。这是一个示例数组; 如果要显示所有绿色水果,可以执行以下操作(让我知道这是否是最佳方法); 这将输出; 太好了,我可以在那里看到它们是2个值,但是实际上我如何才能让PHP计算绿色的水果数量并将其放在变量中,以便我在脚本中进一步使用以解决问题?例如,我想做类似的事情; 我看过count(); 但是我看不到任何添加“ WHERE / cond