pdo绑定数据不对
<code>php</code><code>$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); //然后。。。就没有然后了。。。数据为空 </code>
经过我的一番测试,发现如果SQL是可以地:
<code>sql</code><code>SELECT * FROM user WHERE id IN (1,2,3,4,5) </code>
但是PDO
绑定数据的时候会把SQL变为酱紫(好吧,我猜的o(╯□╰)o):
<code>sql</code><code>SELECT * FROM user WHERE id IN ('1,2,3,4,5') </code>
这特么肯定就不行了啊。。。各位大大可有解决办法,既要能绑定数据,又要不出错?
注意,以上只是简单说明,我的实际情况还要复杂得多。。。但问题我确定过了,就是这个(只有在条件为
IN
时且IN
传入了2
才会出错)。
@netingcn 我的这种绑定方式是可以的,只是被PDO
当成一个参数值了,而我其实是5个参数值。
回复内容:
<code>php</code><code>$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); //然后。。。就没有然后了。。。数据为空 </code>
经过我的一番测试,发现如果SQL是可以地:
<code>sql</code><code>SELECT * FROM user WHERE id IN (1,2,3,4,5) </code>
但是PDO
绑定数据的时候会把SQL变为酱紫(好吧,我猜的o(╯□╰)o):
<code>sql</code><code>SELECT * FROM user WHERE id IN ('1,2,3,4,5') </code>
这特么肯定就不行了啊。。。各位大大可有解决办法,既要能绑定数据,又要不出错?
注意,以上只是简单说明,我的实际情况还要复杂得多。。。但问题我确定过了,就是这个(只有在条件为
IN
时且IN
传入了2
才会出错)。
@netingcn 我的这种绑定方式是可以的,只是被PDO
当成一个参数值了,而我其实是5个参数值。
pdo不支持这种数组绑定。很早就有人提过类似的问题,详情请戳这里:
http://segmentfault.com/q/1010000000119523
附上我临时解决方案,期待哪位大大给出更好的解决办法:
<code>$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); </code>
要不别绑定,要不拆成字符串再绑定吧
http://php.net/manual/zh/pdostatement.execute.php
<code>$ids = array(1, 2, 3, 4, 5); $in = implode(',', array_fill(0, count($ids), '?')); // 生成问号占位符 $sth = $dbh->prepare("SELECT * FROM table WHERE id IN ($in)"); $sth->execute($ids); </code>
使用问号占位符时,execute绑定一个索引数组,所有的值作为 PDO::PARAM_STR 对待.
使用命名占位符时,execute绑定一个关联数组,所有的值作为 PDO::PARAM_STR 对待.

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

MySQL和phpMyAdmin是强大的数据库管理工具。1)MySQL用于创建数据库和表、执行DML和SQL查询。2)phpMyAdmin提供直观界面进行数据库管理、表结构管理、数据操作和用户权限管理。

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

IIS和PHP可以兼容,通过FastCGI实现。1.IIS通过配置文件将.php文件请求转发给FastCGI模块。2.FastCGI模块启动PHP进程处理请求,提高性能和稳定性。3.实际应用中需注意配置细节、错误调试和性能优化。

MySQL和MariaDB的主要区别在于性能、功能和许可证:1.MySQL由Oracle开发,MariaDB是其分支。2.MariaDB在高负载环境中性能可能更好。3.MariaDB提供了更多的存储引擎和功能。4.MySQL采用双重许可证,MariaDB完全开源。选择时应考虑现有基础设施、性能需求、功能需求和许可证成本。

SQL是一种用于管理关系数据库的标准语言,而MySQL是一个使用SQL的数据库管理系统。SQL定义了与数据库交互的方式,包括CRUD操作,而MySQL实现了SQL标准并提供了额外的功能,如存储过程和触发器。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

MySQL和phpMyAdmin可以通过以下步骤进行有效管理:1.创建和删除数据库:在phpMyAdmin中点击几下即可完成。2.管理表:可以创建表、修改结构、添加索引。3.数据操作:支持插入、更新、删除数据和执行SQL查询。4.导入导出数据:支持SQL、CSV、XML等格式。5.优化和监控:使用OPTIMIZETABLE命令优化表,并利用查询分析器和监控工具解决性能问题。

AI可以帮助优化Composer的使用,具体方法包括:1.依赖管理优化:AI分析依赖关系,建议最佳版本组合,减少冲突。2.自动化代码生成:AI生成符合最佳实践的composer.json文件。3.代码质量提升:AI检测潜在问题,提供优化建议,提高代码质量。这些方法通过机器学习和自然语言处理技术实现,帮助开发者提高效率和代码质量。
