php - pdo绑定数据不对
怪我咯
怪我咯 2017-04-10 15:42:21
[PHP讨论组]
php$sql = 'SELECT * FROM user WHERE id IN (:ids)';
$pdo = new PDO('mysql:host=localhost;dbname=test','root','');
$sth->prepare($sql);
$sth->execute([':ids'=>'1,2,3,4,5']);
$users = $sth->fetchAll(PDO::FETCH_ASSOC);
//然后。。。就没有然后了。。。数据为空

经过我的一番测试,发现如果SQL是可以地:

sqlSELECT * FROM user WHERE id IN (1,2,3,4,5)

但是PDO绑定数据的时候会把SQL变为酱紫(好吧,我猜的o(╯□╰)o):

sqlSELECT * FROM user WHERE id IN ('1,2,3,4,5')

这特么肯定就不行了啊。。。各位大大可有解决办法,既要能绑定数据,又要不出错?

注意,以上只是简单说明,我的实际情况还要复杂得多。。。但问题我确定过了,就是这个(只有在条件为IN时且IN传入了2+才会出错)。


@netingcn 我的这种绑定方式是可以的,只是被PDO当成一个参数值了,而我其实是5个参数值。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
大家讲道理

附上我临时解决方案,期待哪位大大给出更好的解决办法:

$ids = [1,2,3,4,5];//外部传入的数组
$sql = 'SELECT * FROM user WHERE id IN (';
foreach($ids as $id){
    $sql.=intval($id).',';
}
$sql = rtrim($sql ,',') . ')';
$pdo = new PDO('mysql:host=localhost;dbname=test','root','');
$sth->prepare($sql);
$sth->execute();
$users = $sth->fetchAll(PDO::FETCH_ASSOC);
高洛峰

要不别绑定,要不拆成字符串再绑定吧

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号