2017-01-30 11 views
-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.................. 

と何をソリューション?

+0

これを確認してください[リンク](http://stackoverflow.com/questions/16120822/mysqli-bind-param-expected-to-be-a-reference-value-given) – hungrykoala

+0

あなたのPHPのバージョンは何ですか? –

+0

@ hungrykoalaそれはトリックでした。 mysqli_stmt :: bind_param():型定義文字列の要素数がバインド変数の数と一致しない – ITSagar

答えて

1

1)この回答に従って、ここに述べた:mysqli bind_param() expected to be a reference, value given

2)は次のように変更く​​ださい:

$params[] = implode("", $paramtype); 

$params = array_merge($params, $paramvalues);

$params = array_merge($paramtype,$paramvalues);

はとそれを交換してください$ par amtypeは配列ですが、bind_paramの最初のパラメータはstringでなければなりません。

関連する問題