【MySQL】WHERE INに空のリストを入れるとエラーになる

mysql エンジニア
記事内に広告が含まれています。

はじめに

MySQLのwhere inに空のリスト()を入れると下記の文法エラーが出ます。

その場合の対処法をご紹介します。

mysql> select * from users where id in ();
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1

where inで文法エラーを出さない方法

空のリストではなく、nullを入れることで文法エラーが解消されます。

OKパターン

mysql> select * from users where id in (null);
Empty set (0.00 sec)

 

NGパターン

mysql> select * from users where id in ();
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 

 

フレームワークでwhere inを使う時は注意が必要

FuelPHPの場合

MySQLを使っている場合は文法エラーにすぐに気づくことができますが、

フレームワークを使っているとMySQLの文法エラーに気づかないことがあります。

 

例としてFuelPHPでuserを検索するための、コードで説明します。

$idsというリストで検索するときに、$idsが空()の場合、MySQLの文法エラーになります。

$where = array(
  array('id', 'in', $ids)
);
$users = Model_User::find('all', compact("where"));

そこで空のリストになり可能性がある場合は、三項演算子などでnullを入れてハンドリングすると文法エラーが発生することを防ぐことができます。

 

$where = array(
  array('id', 'in', ($ids ? $ids : array(null)))
);
$users = Model_User::find('all', compact("where"));

 

コメント