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