2017-09-27 6 views
0

以下の関数を定義しました。この関数は、1つのmySQLクエリに対して異なる数の値で動作するはずです。プレースホルダを使用したMySQLクエリが機能しない

function queryMysql($query, $type, $arr) 
{ 
    global $connection; // this is mysql connection 

    $count = count($arr); 
    $val = array(); 

    for ($i = 0; $i < $count; ++$i) { 
     $val[] = $arr[$i]; 
    } 

    $stmt = $connection->prepare($query); 

    switch ($count) { 
     case 1: 
      $stmt->bind_param($type, $val[0]); 
      break; 
     case 2: 
      $stmt->bind_param($type, $val[0], $val[1]); 
      break; 
     case 3: 
      $stmt->bind_param($type, $val[0], $val[1], $val[2]); 
      break; 
    } 

    $stmt->execute(); 

    printf("%d Row affected.\n", $stmt->num_rows); 

    // rest of function 
} 

と私は以下のようにそれを呼ばれる:

$result = queryMysql("SELECT id FROM my_table WHERE my_value=?", 's', array('user')); 

、これは私を示し続けて:私は間違って

0 Row affected. 

何をしているのですか?私は、stackoverflowのphp.netと関連する質問のドキュメントを読むが、私は問題を見つけることができませんでした。また、データベースにはこのクエリに一致するいくつかの行が含まれていると確信しています。

答えて

1

行数を取得する前に結果を格納する必要があります。

$stmt->execute(); 
$stmt->store_result(); 
printf("%d Row affected.\n", $stmt->num_rows); 

mysqli_stmt::$num_rows

関連する問題