小编And*_*dru的帖子

我可以将数组绑定到IN()条件吗?

我很想知道是否可以使用PDO将值数组绑定到占位符.这里的用例试图传递一个值数组以用于IN()条件.

我希望能够做到这样的事情:

<?php
$ids=array(1,2,3,7,8,9);
$db = new PDO(...);
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN(:an_array)'
);
$stmt->bindParam('an_array',$ids);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

并让PDO绑定并引用数组中的所有值.

目前我正在做:

<?php
$ids = array(1,2,3,7,8,9);
$db = new PDO(...);
foreach($ids as &$val)
    $val=$db->quote($val); //iterate through array and quote
$in = implode(',',$ids); //create comma separated list
$stmt = $db->prepare(
    'SELECT *
     FROM table
     WHERE id IN('.$in.')'
);
$stmt->execute();
?>
Run Code Online (Sandbox Code Playgroud)

这当然能完成这项工作,但只是想知道是否有一个内置的解决方案我缺席了?

php arrays pdo prepared-statement where-in

549
推荐指数
17
解决办法
20万
查看次数

有没有一种简单的方法来消除mootools命名空间污染?

我开发的客户端javascript库在某些区域使用对象作为哈希.它使用属性名称作为键,使用for ... in循环遍历从Json数据解析的对象.例如...(伪代码)

var conversations = {'sha1-string':{name:'foo',messages:[]}}
for(var id in conversations){
    console.log(id);
    console.log(conversations[id].name);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,MooTools(和Prototype等)将方法添加到全局命名空间,所以我的for ... in循环现在遍历MooTools的添加(例如,limit,round,times,each),当它将逻辑应用于它们时会导致错误如果是预期的数据.

因为它是一个库,我不得不期望它将与MooTools,Prototype等一起使用.有没有一个简单的解决这个问题的方法?我目前的解决方案是将对象传递给一个方法,该方法剥离MooTools特定的条目并返回干净的对象,但这也意味着检查Prototype和所有类似的库添加,并且似乎是一种向后的做事方式.

我的另一个解决方案是停止依赖属性名称作为键,并在循环中执行验证以确保我正在查看我想要的数据.在我改写之前,我想知道是否有人有更好/现有的解决方案?

谢谢 :)

javascript mootools prototypejs

6
推荐指数
1
解决办法
519
查看次数