如何在PHP中使用IN子句的查询中使用预准备语句

Nic*_*tti 5 php mysql prepared-statement

我需要做一个简单的查询

$array_of_ids = array();
//poulate $array_of_ids, they don't come from another db but from Facebook
//so i can't use a subquery for the IN clause
$wpdb->prepare("SELECT id from table where id IN (%d, %d)", $array_of_ids [0], $array_of_ids [1]);
Run Code Online (Sandbox Code Playgroud)

问题是,如果我在数组中有200个元素,处理这个问题的正确方法是什么?我必须用200手动构建查询%d吗?我需要这个查询,因为我必须与facebook数据"同步"我的数据库,我必须检查我在数据库中的用户是否存在,更新那些存在的,插入新用户并删除那些不是我的朋友.

egg*_*yal 4

如果您确定数组元素是数字:

$wpdb->prepare("SELECT id FROM table WHERE id IN ("
  . implode(',',$array_of_ids) . ")");
Run Code Online (Sandbox Code Playgroud)

否则,可以使用vsprintf的形式prepare传入参数数组:

$wpdb->prepare("SELECT id FROM table WHERE id IN ("
  . str_repeat("%d,", count($array_of_ids)-1) . "%d)" , $array_of_ids);
Run Code Online (Sandbox Code Playgroud)

  • 有点违背了准备好的声明的全部目的,不是吗? (4认同)