Home >Backend Development >PHP Tutorial >PDO如何绑定IN()语句的array变量

PDO如何绑定IN()语句的array变量

WBOY
WBOYOriginal
2016-06-06 20:51:501447browse

我的sql语句中有IN的条件,在我的想象中可以这样写代码

$ids = array(2344, 5523, 9332);
$st = $pdo->prepare('SELECT * FROM table_name WHERE id IN (:id)');
$st->bindParam('id', $ids);
$st->execute();

但这样执行pdo会报错,无法绑定一个array变量,有没有好的解决方法呢

回复内容:

我的sql语句中有IN的条件,在我的想象中可以这样写代码

$ids = array(2344, 5523, 9332);
$st = $pdo->prepare('SELECT * FROM table_name WHERE id IN (:id)');
$st->bindParam('id', $ids);
$st->execute();

但这样执行pdo会报错,无法绑定一个array变量,有没有好的解决方法呢

PDO不支持绑定数组。
要么别用绑定了,

$ids = array(2344, 5523, 9332);
// 过滤ids略
$in = implode(',',$ids); 
$st = $pdo->prepare('SELECT * FROM table_name WHERE id IN ('.$in.')');
$st->execute();

如果你坚持用绑定或许只能这样

$ids = array(2344, 5523, 9332);
// 自动构造多个?号略
$st = $pdo->prepare('SELECT * FROM table_name WHERE id IN (?,?,?)');
foreach ($ids as $k => $id)
    $st->bindValue(($k+1), $id);
$st->execute();

上午刚说过这个问题,PDO不支持这种绑定,参见:
http://segmentfault.com/q/10100000001... 第三条。

08年写lotusphp的文档时专门标注了,PDO不支持这个,楼上zhao yi也是lotusphp开发者

PDO是不支持这种绑定的,但是可以通过第三方的Class来实现,这个是我做的一个PDO Class,可以实现安全的WHERE IN,而且使用也方便。

https://github.com/lincanbin/PHP-PDO-MySQL-Class
使用方法也很简单,先new一个对象

<code><?php define('DBHost', '127.0.0.1');
define('DBName', 'Database');
define('DBUser', 'root');
define('DBPassword', '');
require(dirname(__FILE__)."/src/PDO.class.php");
$DB = new Db(DBHost, DBName, DBUser, DBPassword);
?>
</code>

然后

<code><?php $DB->query("SELECT * FROM fruit WHERE name IN (?)",array('apple','banana'));
?>
</code>

即可,其他的SQL语法使用可以看https://github.com/lincanbin/PHP-PDO-MySQL-Class

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn