-1
私は動的SQLクエリを実装しようとしています。ユーザは、1つまたは複数のフィルタを使用して、必要なデータを掘り起こす柔軟性があります。私はSQLインジェクションがないことを保証するためにプリペアドステートメントを使用しています。私はWAMPサーバー64ビットを使用しています。 私は私のコードを書くために、この記事を参照:後Sampleフィルタ用のPHP動的mysqlクエリ
は私のコードです:
$myqry="SELECT * FROM students WHERE ";
$initflag=0; //controls the first clause without AND and rest with AND
$paramtypes=array();
$paramvalues=array();
$params=array();
if(!empty($_POST['awr_admyear']))
{
$myqry.= "YEAR(adm_date)=? ";
$initflag=1;
$paramtypes[]='s';
$paramvalues[]=$_POST['awr_admyear'];
}
if(!empty($_POST['awr_admfrom']) && !empty($_POST['awr_admto']))
{
if($initflag==0)
$myqry.= "YEAR(adm_date) BETWEEN ? AND ? ";
else
$myqry.= "AND YEAR(adm_date) BETWEEN ? AND ? ";
$initflag=1;
$paramtype[]='s';
$paramtype[]='s';
$paramvalues[]=$_POST['awr_admfrom'];
$paramvalues[]=$_POST['awr_admto'];
}
if(!empty($_POST['awradm_no']))
{
if($initflag==0)
$myqry.= "adm_no LIKE ? ";
else
$myqry.= "AND adm_no LIKE ? ";
$initflag=1;
$paramtype[]='s';
$paramvalues[]=$_POST['awradm_no'];
}
$params = array_merge($paramtype,$paramvalues);
if(isset($myqry) && !(empty($myqry)))
{
if($result1 = $mysqli->prepare($myqry))
{
call_user_func_array(array($result1, 'bind_param'), $params);
if($result1->execute())
{
$finrest=$result1->get_result();
while($row= $finrest->fetch_assoc())
{
//and so on
私は次のエラー取得しています:私は間違っているつもりです
Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in..................
と何をソリューション?
これを確認してください[リンク](http://stackoverflow.com/questions/16120822/mysqli-bind-param-expected-to-be-a-reference-value-given) – hungrykoala
あなたのPHPのバージョンは何ですか? –
@ hungrykoalaそれはトリックでした。 mysqli_stmt :: bind_param():型定義文字列の要素数がバインド変数の数と一致しない – ITSagar