Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在使用准备好的语句启动新语句之前关闭语句对象_Php_Mysqli_Prepared Statement - Fatal编程技术网

Php 在使用准备好的语句启动新语句之前关闭语句对象

Php 在使用准备好的语句启动新语句之前关闭语句对象,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我对使用预先准备好的语句非常陌生,我想知道是应该在每次调用后关闭stmt_init(),还是可以让它保持打开状态 $stmt = $mysqli->stmt_init(); if($stmt->prepare("SELECT player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ? AND fk_player_id = ?")){ $

我对使用预先准备好的语句非常陌生,我想知道是应该在每次调用后关闭stmt_init(),还是可以让它保持打开状态

$stmt = $mysqli->stmt_init();

if($stmt->prepare("SELECT player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ? AND fk_player_id = ?")){

    $stmt->bind_param('ii', $currgame, $playerid);
    $stmt->execute();
    $stmt->bind_result($udraws, $uturn, $upass, $uswaps);
    $stmt->fetch();

    echo $udraws.'-'.$uturn.'-'.$upass.'-'.$uswaps.'<br>';

    // Close statement object
    $stmt->close(); 

}

$stmt = $mysqli->stmt_init();

if($stmt->prepare("SELECT player_draws, player_turn, player_passes, swapped FROM ".$prefix."_gameplayer WHERE fk_game_id = ? AND fk_player_id != ?")){

    $stmt->bind_param('ii', $currgame, $playerid);
    $stmt->execute();
    $stmt->bind_result($odraws, $oturn, $opass, $oswaps);
    $stmt->fetch();

    echo $odraws.'-'.$oturn.'-'.$opass.'-'.$oswaps.'<br>';

    // Close statement object
    $stmt->close(); 

}
$stmt=$mysqli->stmt_init();
如果($stmt->prepare(“选择玩家\u抽签、玩家\u转身、玩家\u传球、从“$prefix”交换。”\u玩家,其中fk\u玩家id=?和fk\u玩家id=?”){
$stmt->bind_param('ii',$currgame,$playerid);
$stmt->execute();
$stmt->bind_result($udraws、$uturn、$upass、$uswaps);
$stmt->fetch();
回显$udraws.'-'.$uturn.'-'.$upass.'-'.$uswaps.'
'; //关闭语句对象 $stmt->close(); } $stmt=$mysqli->stmt_init(); 如果($stmt->prepare(“选择玩家\u抽签、玩家\u转身、玩家\u传球、从“$prefix”交换。”\u玩家,其中fk\u玩家id=?和fk\u玩家id!=?”){ $stmt->bind_param('ii',$currgame,$playerid); $stmt->execute(); $stmt->bind_result($odraws、$oturn、$opass、$oswaps); $stmt->fetch(); 回显$odraws.'-'.$oturn.'-'.$opass.'-'.$oswaps.'
'; //关闭语句对象 $stmt->close(); }
其中一个是否更适合数据库调用

提前谢谢

…一条准备好的语句或一条参数化语句用于高效地重复执行同一条语句

编辑 由于查询不同,每个查询都需要单独准备,但您应该能够重用$mysqli->stmt_init()

旁注中有人提到:


*如果要在循环中重复语句,请在其中使用bind_param等进行更大的操作。我想用stmt->close来清理它会很好。但它总是在一次考试后出错。250次行动。当我尝试使用stmt->reset时,它对我有效。*

但在第一个示例中,我想从fk_player_id=?在第二个我想知道fk_玩家id!=?。我怎么能把它放在同一个地方呢?对不起,我现在只看到了,以为它们是一样的。您应该能够使用相同的$mysqli->stmt_init();但您需要重新准备第二个查询。谢谢:-)您帮了大忙!