2016-09-27 9 views
1

パラメータが不明なSQL文を準備しようとしています!これらのパラメータは、配列内で継承されています。機能のための通常の構文は次のようになります。PHPで配列を引数として渡す

$stmt->bind_param("string of types",param1,param2,...,paramN) 

問題は、私はこのコードを持っていますが、そうでない配列

外の機能で$ stmt-> bind_paramをパラメータを追加する方法を知りませんで仕事:

$stmt= $conn->prepare($request['query']); 
if(isset($request['params'])){ 
call_user_func_array('$stmt->bind_param',$request['params']); 
} 
$stmt->execute(); 
$result = $stmt->get_result(); 

$ request ['params']には、関数に追加する必要がある正しいパラメータが含まれています。

しかしcall_user_func_arrayは私に、このエラーを与える:

call_user_func_array() expects parameter 1 to be a valid callback, function '$stmt->bind_param' not found or invalid function.

私はcall_user_func_arrayを使用する権利の関数ではないかもしれないと思います! 私は何時間もグーグルで勉強しましたが、この小さな問題の解決策を見つけることができませんでした。 、call_user_func_arrayにコールバックパラメータとしてメソッドを使用して、コールバックパラメータとして、その中にオブジェクト名の配列とメソッド名を使用するには

call_user_func_array(array($stmt,'bind_param'),$request['params']); 
+1

使用している機能について[ドキュメント](http://php.net/call_user_func_array)をお読みください。これらの例は、この関数を介してオブジェクトメソッドを適切に呼び出す方法を示しています。 –

答えて

1

のようなものを試してみてください。

更なる説明のためにPHPのcall_user_func_arrayドキュメントページをチェックしてください:http://php.net/manual/pt_BR/function.call-user-func-array.php

// Call the $foo->bar() method with 2 arguments 
$foo = new foo; 
call_user_func_array(array($foo, "bar"), array("three", "four")); 
+0

ありがとうございます!問題はそれが参照ではなく値を与えることです:mysqli_stmt :: bind_param()へのパラメータ2は、参照、値が与えられると期待されます –

+0

解決しました!この関数を使って、私はインターネット上にある:function refValues($ arr){ if(strnatcmp()}); call_user_func_array(array($ stmt、 'bind_param')、refValues($ request ['params']) phpversion()、 '5.3')> = 0)// PHP 5.3以降では参照が必要です { $ refs = array(); foreach($ arr $ key => $ value) $ refs [$ key] =&$ arr [$ key]; return $ refs; } return $ arr; } ' –

3

あなたがPHP 5.6+を使用している場合、あなたはまた、例えば、むしろcall_user_func_arrayを使用するよりもsplat演算子を使用することができます

$stmt->bind_param($types, ...$request['params']); 

そうでない場合は引数の配列の前面にshift -edする必要があるだろうbind_paramへの最初の引数がありますので、これは、あなたのユースケースのために滑らかな印象になります。

+0

私は5.6+を使用していません!それはusbwebserver上の単なるテストなので、それは5.2ですが、私がそのバージョンを持っていれば、あなたのソリューションは最高でしょう –

関連する問題