首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql:在一个查询中一起选择使用名称NOT ($array)和年龄IN ($array)

Mysql:在一个查询中一起选择使用名称NOT ($array)和年龄IN ($array)
EN

Stack Overflow用户
提问于 2018-06-26 09:53:35
回答 2查看 126关注 0票数 1

我有一个mysql select查询语句,如使用php,

代码语言:javascript
复制
$rrt = implode(',',array_fill(0,count($ees),'?'));
$rrr = implode(',',array_fill(0,count($array),'?'));



$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND ageNOT IN ($rrt) GROUP BY name ");

我试过:

代码语言:javascript
复制
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($rrr) AND age NOT IN ($rrt) GROUP BY name ");
$select->($array);

误差输出

致命错误: Uncaught : SQLSTATEHY093:无效参数号:绑定变量数与

代码语言:javascript
复制
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND age NOT IN ($rrt) GROUP BY name ");
$select -> bindParam(1,$array);
$select -> bindParam(2,$ees);
$select -> execute();

误差输出

致命错误: Uncaught : SQLSTATEHY093:无效参数号:绑定变量数与

代码语言:javascript
复制
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ('".implode('","',$array)."') AND ageNOT IN ($rrt) GROUP BY name ");
$select -> execute($ees);

这一次给出了一些结果,但不是我想要的;我想使用这样的查询:

代码语言:javascript
复制
$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($array) AND age NOT IN ($rrt) GROUP BY name ");
$select -> execute($ees);

但是我不想得到参数绑定错误的数目,请帮助!提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-06-26 10:21:54

这应该是可行的:

代码语言:javascript
复制
$rrr = implode(',',array_fill(0,count($array),'?'));
$rrt = implode(',',array_fill(0,count($ees),'?'));

$select = $con ->prepare("SELECT name from table WHERE name NOT IN ($rrr) AND age NOT IN ($rrt) GROUP BY name ");
$index = 1;
foreach($array as $key => $value) {
    $select -> bindParam($index++,$array[$key]);
}
foreach($ees as $key => $value) {
    $select -> bindParam($index++,$ees[$key]);
}
$select -> execute();

注bindParam需要一个变量引用。

票数 1
EN

Stack Overflow用户

发布于 2018-06-26 10:27:20

假设您使用的是PDO,那么只有两种方法可以将值传递给参数化查询:

  • 与bindParam()
  • 通过将参数数组传递到execute()

在前一种情况下,你要么用问号的位置约束(为了?)样式参数),或按参数名称(用于命名参数)

在这两种情况下,只能将一个变量绑定到一个参数。不能用bindParam绑定整个数组(尽管可以绑定数组中的单个条目)。

若要将数组传递到execute中,则它必须是具有与有问号相同数目的索引数组(用于?样式),或者它必须是一个具有与命名占位符匹配的键的数组(用于命名参数样式)。同样,每个占位符只能绑定一个条目。

您似乎要做的是将两个数组绑定到同一个查询。你不能这么做。不过你也有其他选择。

  • 在循环中预先处理每个数组和bindparam()
  • 构建一个包含所有要传入的参数的数组(注意数组中的位置与要在查询中绑定的问号的位置相对应!)并将其传递给execute()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51039942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档