如何管理空IN sql查询?

Mr *_*der 10 php mysql sql

$ids = array(1,2,3);
$in = implode(',',$ids);

$query = "SELECT * FROM user where user_id IN ($in) ";
Run Code Online (Sandbox Code Playgroud)

查询没有问题.但是什么时候$ids是空阵$ids = array();

我正确地得到了sql查询错误,因为SELECT * FROM user where user_id IN ()它不是一个有效的查询.

如何在不检查空数组的情况下避免这种情况,即无论如何都要进行查询运行?

Fai*_*Ali 8

$ in为空时,不应运行查询.我认为你需要的是这样的

$in = implode(',',$ids);
if($in) {
     $query = "SELECT * FROM user where user_id IN ($in) ";
 }
 else {
      //alternate scenario here
 }
Run Code Online (Sandbox Code Playgroud)

编辑

$in = implode("','",$ids); // generate like 1','2
$query = "SELECT * FROM user where user_id IN ('$in') "; //  if has  1','2 surrond it with quote make it IN('1','2') and if empty than IN('')
Run Code Online (Sandbox Code Playgroud)


Fal*_*con 6

管理这个的最佳方法是:

$in = implode("','",$ids); // generate like 1','2
$query = "SELECT * FROM user where user_id IN ('$in') "; //  if has  1','2 surrond it with quote make it IN('1','2') and if empty than IN('')
Run Code Online (Sandbox Code Playgroud)

这样可以省去if/else结构和其他所有内容

  • 在某些情况下,该列可能包含一个空值,并且此解决方案将返回所有空值。例如,这可能发生在外键列中。 (2认同)
  • 如果user_id是唯一标识符,则会引发转换失败错误。 (2认同)

Ruk*_*tel 5

你可以在$ ids字符串之前加0.毕竟No ID将从任何数据库中的0开始.

或者你可以这样做..

$sql = "SELECT * FROM user where ".($ids != ''? "user_id IN ($ids)" : " 1=1");
Run Code Online (Sandbox Code Playgroud)