SQLのQUERY生成でsprintfを使いたくない

[PHP] : SQLのQUERY生成でsprintfを使いたくない

内容

  • sprintfは見た長い文字列を書き足しやすくするための関数で、SQLの生成ではできるだけ使いたくない。
  • sprintfは型の指定が入るので、特にnullなどの扱いに気をつけないといけない。
  • sprintf + LIKE文を作ろうとすると %を多用するので、LIKE "%%%s%%"といった指定になり、見づらい。


$sql = sprintf( 
   "INERT INTO  %s.%s (%s,%s) value(%s,%s) WHERE id = %s ",  
   "mysql",
   "test",
   "name",
   "key",
   null,
   null,
   7
    );
echo $sql . "\n";

$sql = sprintf( 
   "SELECT * FROM %s.%s WHERE id = %d AND name LIKE '%%%s%%' ",
   "mysql",
   "test",
   1,
   "hoge" );
echo $sql . "\n";

出力SQL

INERT INTO  mysql.test (name,key) value(,) WHERE id = 7;
SELECT * FROM mysql.test WHERE id = 1 AND name LIKE '%hoge%' ;
  • 1の例は本来ならばvalue( 'a', 'test_key' )のように文字列が入ってくるところ処理の過程で誤ってnullが入ってしまった場合。
  • 2の例はソースコード上に%が多数含まれて、逆に見づらい。