5

私はプリペアドステートメントにまったく慣れておらず、これを正しく行っているかどうかわかりません。

これが私が試したことです:

$currgame = 310791;

$sql = "SELECT fk_player_id, player_tiles, player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ?";
$stmt = $mysqli->stmt_init();

$data = array();
if($stmt->prepare($sql)){
    $stmt->bind_param('i', $currgame);
    $stmt->execute();

    $fk_player_id = null; $player_tiles = null; $player_draws = null; $player_turn = null; $player_passes = null; $swapped = null;
    $stmt->bind_result($fk_player_id, $player_tiles, $player_draws, $player_turn, $player_passes, $swapped);

    $res = $stmt->get_result();

    while ($row = $res->fetch_assoc()){
        $data[] = $row;
    }
    $stmt->close(); 
}

// to display own games
foreach ($data as $row) {
    if ($row['fk_player_id'] == $playerid) {

        $udraws = $row['player_draws']+1; 
        $upass = $row['player_passes'];
        $uswaps = $row['swapped'];

        echo 'uDraws: '.$udraws.'<br>';
        echo 'uPass: '.$upass.'<br>';
        echo 'uSwaps: '.$uswaps.'<br><br>';
    }
}
// to display other games
foreach ($data as $row) {
    if ($row['fk_player_id'] != $playerid) {

        $opponent = $row['fk_player_id'];
        $oppTiles = $row['player_tiles'];

        $odraws = $row['player_draws']+1;
        $opass = $row['player_passes'];
        $oswaps = $row['swapped'];

        echo 'oID: '.$opponent.'<br>';
        echo 'oTiles: '.$oppTiles.'<br>';

        echo 'oDraws: '.$odraws.'<br>';
        echo 'oPass: '.$opass.'<br>';
        echo 'oSwaps: '.$oswaps.'<br><br>';

    }
}

これを実行しようとすると「ServerError」が発生します。これは「$res= $ stmt-> get_result();」です。エラーが発生しますが、理由はわかりません。助けてください。

前もって感謝します :-)

#### 編集
$sql = "SELECT fk_player_id, player_tiles, player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ?";
$stmt = $mysqli->stmt_init();

$data = array();
if($stmt->prepare($sql)){
    $stmt->bind_param('i', $currgame);
    $stmt->execute();

    $fk_player_id = null; $player_tiles = null; $player_draws = null; $player_turn = null; $player_passes = null; $swapped = null;
    $stmt->bind_result($fk_player_id, $player_tiles, $player_draws, $player_turn, $player_passes, $swapped);

    while ($row = $stmt->fetch()){
        $data[] = $row;
    }
    $stmt->close(); 
}

echo '<pre>';
print_r($data);
echo '</pre>';
4

3 に答える 3

14

PHP/MySQL の設定によっては、get_result() を使用できない場合があります。

これを回避する方法は、結果をバインドすることです。

例えば:

$stmt->execute();

$fk_player_id = null; $player_tiles = null; $player_draws = null; $player_turn = null; $player_passes = null; $swapped = null;

$stmt->bind_result($fk_player_id, $player_tiles, $player_draws, $player_turn, $player_passes, $swapped);

while ($stmt->fetch()) { // For each row
    /* You can then use the variables declared above, which will have the 
    new values from the query every time $stmt->execute() is ran.*/
}

詳細については、ここをクリックしてください

于 2013-02-03T10:47:15.270 に答える
-1

コードに表示されないため、mysqliクエリを実行する前に、オブジェクトをインスタンス化していることを確認してください。

$mysqli = new mysqli("127.0.0.1", "user", "password", "mydb"); 
if($mysqli->connect_error){
    die("$mysqli->connect_errno: $mysqli->connect_error");
}

また、ServerError確かにログに表示され、正しい方向を示します。

于 2013-02-03T10:42:32.290 に答える
-1
while (mysqli_stmt_fetch($stmt)) {
        printf ("%s (%s)\n", $name, $code);
    }

これはあなたを助けるかもしれません:

http://php.net/manual/en/mysqli-stmt.fetch.php

于 2013-07-03T18:22:58.693 に答える