如何使用准备好的语句获取结果并在while循环中使用它?

How to use prepared statements to get results and use it in a while loop?

我想使用准备好的语句而不是我当前的代码:

    if(isset($_POST['submit']) && $_POST['checkGame'] != 'Any')
    {
        $game = $_POST['checkGame'];
        $sql="SELECT ipaddress, port FROM servers WHERE game=('$game')";
            $result=mysqli_query($con,$sql);
            while ($row=mysqli_fetch_array($result)) {
            array_push($serverConnectionArray, ["address" =>$row['ipaddress'], "port" =>$row['port']]);
    }
    }

我试过:

    if(isset($_POST['submit']) && $_POST['checkGame'] != 'Any')
    {
        $game = $_POST['checkGame'];
        $stmt = $mysqli->prepare("SELECT ipaddress, port FROM servers WHERE game=?");
        $stmt->bind_param("s", $game);
        $stmt->execute();
        $result = $stmt->get_result();
        $stmt->fetch();
            while ($row=mysqli_fetch_array($result)) {
            array_push($serverConnectionArray, ["address" =>$row['ipaddress'], "port" =>$row['port']]);
        $stmt->close();
    }
    }

还有更多。但是,我收到此错误:

注意:未定义变量:mysqli in ...list.php on line 26

致命错误:未捕获错误:调用成员函数 prepare() on null in ...list.php:26 堆栈跟踪:#0 {main} 抛出 ...list.php第 26 行

谢谢!

您似乎没有正确定义对象。

$connection = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

首先,你在混合 API 风格; MySQLi 扩展可以以两种方式使用:使用面向对象 (OOP) 方法($mysqli->)或过程方法(mysqli_* 函数)。你不能混合两种风格。 1

您似乎想使用 OOP 样式。在这种情况下,您首先需要创建实际的 mysqli 对象(也称为 mysqli class 的实例),例如:2

$mysqli = new mysqli('127.0.0.1', 'username', 'password', 'dbname');

请参阅 basic examples in the documentation 了解更多关于之后如何进行的信息。


1) 请参阅下面@Fred-ii- 的评论:事实证明接口 可以 实际上是混合的。我不知道这个。
2) 关于 OP 是否简单地解决了错误的变量名称,或者 OP 是否完全忘记首先实例化 MySQLi 连接的问题是模棱两可的;两者都会发出相同的通知。