3

私は php の専門家ではありません。mysql db を照会する小さなサービスを開発しました。

しかし、私は php 5.4 で開発し、Web ホスティング プランに 5.2.6 があることを発見したため、未定義の関数で問題が発生することはほとんどありません。

具体的には、この場合、 > 5.3 で利用可能な mysqli_stmt_get_result 未定義関数をどのように解決できますか? コードは次のとおりです。

  $stmt = mysqli_prepare($con,$db_query);

  if($stmt) {

     mysqli_stmt_bind_param($stmt,'ss',$after,$lang);
     mysqli_stmt_execute($stmt);
     $result = mysqli_stmt_get_result($stmt); // <-- getting undefined error here !!!

     $updated = array();
     $deleted = array();

     while($row = mysqli_fetch_assoc($result)) {

        if($row['status']==1) {
           array_push($updated,$row);
        } else {
           $cardName=$row['cardName'];
           $cardStatus=$row['status'];
           $cardId=$row['cardId'];
           $language=$row['language'];
           array_push($deleted,array(
                    'cardName'=>$cardName,
                                    'status'=>$cardStatus,
                                    'cardId'=>$cardId,
                                    'language'=>$language
                               )
           );
        }
     }

     $response = array(
        'cards'=>array(
           'updated'=>$updated,
           'deleted'=>$deleted
        )
     );

     $json = json_encode($response);
     mysqli_close($con);
     echo $json;

  }

ポイントは、準備済みステートメントを使用しているということです.phpの知識が不足しているため、スクリプト全体を書き直さない限り、問題を解決する他の方法が見つかりませんでした.

シンプルで簡単な解決策をお持ちの方もいらっしゃると思います。

4

3 に答える 3

7

同様の問題がありました。ところで - mysqlnd は 5.3 で利用可能ですが、5.4 でコンパイルする必要があります。デフォルトでそこにあります。

私の場合、ほとんどのコードを保持し、次のものを置き換えることで機能させることができました

$result = mysqli_stmt_get_result($stmt); // <-- doesn't work without mysqlnd
while($row = mysqli_fetch_assoc($result)) {
    $cardName=$row['cardName'];
    ...
}

$stmt->bind_result($dbCardId, $dbCardName);  // <-- one param for each field returned
while ($stmt->fetch()) {
    $cardName = $dbCardName;
    ...
}
于 2012-12-10T02:25:17.773 に答える
3

関数はmysqli_stmt_get_resultPHP 5.3 以降のみです。PHP 5.2.x バージョンには存在しません (これはもはやサポートされていません)。

mysqli_stmt_bind_result別の方法は、変数バインディングを使用することです。

具体的な例では、変数を直接バインドできるため、配列メンバーを変数に割り当てる必要がないという利点さえあります。

このmysqli_stmt_get_result関数が導入されたのは、これが邪魔になり、配列を取得する方が簡単だと誰かが考えたからです。

于 2012-10-21T12:51:14.357 に答える