Y's note

Web技術・プロダクトマネジメント・そして経営について

本ブログの更新を停止しており、今後は下記Noteに記載していきます。
https://note.com/yutakikuchi/

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

内容

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

<?php
$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の例はソースコード上に%が多数含まれて、逆に見づらい。