首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有位置占位符的MySQL SELECT IN仅根据字符串中的第一个值进行选择/过滤

带有位置占位符的MySQL SELECT IN仅根据字符串中的第一个值进行选择/过滤
EN

Stack Overflow用户
提问于 2013-06-25 14:15:46
回答 2查看 744关注 0票数 0

要选择列值为11、12或23的MySQL行。尝试使用这样的代码

代码语言:javascript
运行
复制
$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN (?)';
$sql = $db->prepare($query_select_all);
$data1[] = '11, 12, 23';
$sql->execute($data1);

但是代码只选择列值为11的行(来自$data1[] = '11, 12, 23';的第一个值)

在不使用?的情况下尝试,并在必要时工作。

以下是不带? (位置占位符)的语句

代码语言:javascript
运行
复制
$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN (11, 12, 23)';
$sql->execute();

语句按预期工作(选择EntryId为11、EntryId为12或EntryId为23的行。

第一个代码(使用?)中的错误在哪里?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-25 15:56:06

基于https://stackoverflow.com/a/15991146/285587

代码语言:javascript
运行
复制
$query_select_all = 'SELECT * FROM 2_1_journal WHERE CAST(EntryId AS UNSIGNED) IN';
$data1 = '11, 12, 23';
$data1 = explode(",",$data1);//Convert Comma Separated String into Array
$in  = str_repeat('?,', count($data1) - 1) . '?';
$query_select_all = $query_select_all .'('. $in .')';
$sql = $db->prepare($query_select_all);
$sql->execute($data1);
票数 1
EN

Stack Overflow用户

发布于 2013-06-25 14:21:20

我认为你应该用between而不是IN....来改变语句。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17290342

复制
相关文章

相似问题

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