bind_paramを動的に構築するには、他のSOの投稿でこれを見つけました。PHPの動的mysqli bind_param引数の簡単な解法は何ですか?
call_user_func_array(array(&$stmt, 'bindparams'), $array_of_params);
誰かがこれを私のために普通の英語で壊すことができますか?私は特に最初の引数が配列であることを失ってしまいます。
bind_paramを動的に構築するには、他のSOの投稿でこれを見つけました。PHPの動的mysqli bind_param引数の簡単な解法は何ですか?
call_user_func_array(array(&$stmt, 'bindparams'), $array_of_params);
誰かがこれを私のために普通の英語で壊すことができますか?私は特に最初の引数が配列であることを失ってしまいます。
array($stmt, 'bindparams')
PHP 5以降ので、これは古いでグリッチのように見えますが、もはや前に&
を使用する必要はありません(とmysqliのは、PHP 5である、オブジェクト$stmt
にメソッドのbind_paramsを特定のPHPの方法です役職)。
そう
call_user_func_array(array($stmt, 'bindparams'), $array_of_params);
は基本的に
$stmt->bind_params($array_of_params[0], $array_of_params[1] ... $array_of_params[N])
これを行うために多くのsimper方法がありますを意味しhere
同様の例を見ることができます。
このプリペアドステートメントを作成:
select * from mytable
where status = ? and (userid = ? or ?)
and (location = ? or ?)
order by `date` desc, time desc
limt ?
をし、このようにバインドするために引数を渡す:
$stmt = $mysqli->prepare([statement above]);
$stmt->bind_param("siiiii",
"active", $userid, $userid == "ALL",
$location, $location == "ALL",
$limit);
のuser_idが最初に置き換えられ、パラメータ、または時に等しいとき、述語(user_id = ? or ?)
がtrueになります2番目の置き換えられたパラメータはtrueです。
$user_id
intに変換したときの値は、数値の文字列表現の場合は値になります。式$userid == "ALL"
はブール値に評価され、bind_param
に渡されます。 bind_param
は、パラメータがブール値(フォーマット文字列は文字列、int、double、およびblobのみを理解する)であるとは判断できませんので、bind_paramはブール値をintに変換します。
データベースのuser_idまたはlocation_idがゼロでない限り、正常です。
+1これは私の他のいくつかの他の問題を解決します:) – johnnietheblack
私が知る限り、例えば次のような結果を渡すことはできません。 $userid == "ALL"
〜mysqli-statement-Objectのbind_paramメソッドです。このメソッドは、パラメータを参照渡しで渡す必要があるためです。明らかに、これは「現場で」評価された式の結果では不可能です。回避策として
は、私はそのような
$userIdEmpty = $userid == "ALL";
$locationEmpty = $location = "ALL";
$stmt->bind_param("siiiii",
"active", $userid, $userIdEmpty,
$location, $locationEmpty,
$limit);
にプログラムの第二の部分を変更し、ブール演算の結果は、参照によって渡すことができます。
感謝します。私は今、良い一日になると言うことができます – johnnietheblack