PHPで可変長の引数を渡したいときは、 call_user_func_array
という関数を使う。可変長の変数を配列に入れて、第1引数に文字列で関数名を書いて、第2引数に可変長の引数を渡す。
例えば、sprintf みたいな書き方でエスケープした文字列を作る関数を定義してみると、以下のように書く。
// パラメータをエスケープするための処理。(MySQLにつないでからじゃないと使えない)
function escape_query($condition_ary)
{
_db_connect();
// フォーマットを取得(第1引数)
$format = array_shift($condition_ary);
// 第2引数以降が、エスケープすべき値
$escaped_value_ary = array();
foreach($condition_ary as $_val)
{
$_escaped_val = mysql_real_escape_string($_val);
array_push($escaped_value_ary, $_escaped_val);
}
array_unshift($escaped_value_ary, $format);
return call_user_func_array('sprintf', $escaped_value_ary);
}
//呼ぶとき Railsぽく
$conditions = array("select * from fruits where color = '%s' and name = '%s'", $_POST['color'], $_POST['name']);
$escaped_str = escape_query($conditions);