【问题标题】:Getting multiple rows with prepared statement [duplicate]使用准备好的语句获取多行[重复]
【发布时间】:2013-02-03 10:33:38
【问题描述】:

我对准备好的语句很陌生,我不确定我这样做是否正确。

这是我的尝试:

$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-&gt;get_result(); 导致错误,但不确定原因。

PHP 致命错误:在第 61 行调用 /home/mypage/public_html/TEST/preparedstatement.php 中未定义的方法 mysqli_stmt::get_result()

【问题讨论】:

  • 请详细说明“ServerError”。有任何迹象表明错误来自哪里(MySQL、Apache、PHP)?任何不寻常的 HTTP 状态代码?完整的错误信息是什么?

标签: php mysqli prepared-statement


【解决方案1】:

根据您的 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.*/
}

For more information click here

【讨论】:

  • 试过这个(参见原始帖子中的编辑)但我仍然得到错误:(HTTP-error 500(内部服务器错误))。如果我在“$res = $stmt->get_result();”之前退出页面加载正常?不知道怎么回事?
  • 不...没有访问权限:-/
  • @Mansa 你能问一下你的主人是谁吗?
  • 会的。很快就会回复。
  • 这就是我所说的:PHP 致命错误:在第 61 行的 /home/mypage/public_html/TEST/preparedstatement.php 中调用未定义的方法 mysqli_stmt::get_result()
【解决方案2】:

由于我在您的代码中没有看到它,请确保在尝试查询之前实例化 mysqli 对象:

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

另外,ServerError 肯定会出现在您的日志中,并为您指明正确的方向。

【讨论】:

    【解决方案3】:
    while (mysqli_stmt_fetch($stmt)) {
            printf ("%s (%s)\n", $name, $code);
        }
    

    这可能会对您有所帮助:

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

    【讨论】:

    • 请对您的代码进行解释,以便更清楚地了解它在做什么以及它如何帮助提问者解决他们的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-10-26
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多