2009-04-16 1 views

答えて

15
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]) 
+0

感謝します。私は今、良い一日になると言うことができます – johnnietheblack

1

これを行うために多くの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がゼロでない限り、正常です。

+0

+1これは私の他のいくつかの他の問題を解決します:) – johnnietheblack

2

私が知る限り、例えば次のような結果を渡すことはできません。 $userid == "ALL" 〜mysqli-statement-Objectのbind_paramメソッドです。このメソッドは、パラメータを参照渡しで渡す必要があるためです。明らかに、これは「現場で」評価された式の結果では不可能です。回避策として

は、私はそのような

$userIdEmpty = $userid == "ALL"; 
$locationEmpty = $location = "ALL"; 
$stmt->bind_param("siiiii", 
    "active", $userid, $userIdEmpty, 
    $location, $locationEmpty, 
    $limit); 

にプログラムの第二の部分を変更し、ブール演算の結果は、参照によって渡すことができます。

関連する問題