如何使用准备好的语句获取结果并在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 连接的问题是模棱两可的;两者都会发出相同的通知。
我想使用准备好的语句而不是我当前的代码:
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) 方法( 1$mysqli->
)或过程方法(mysqli_*
函数)。你不能混合两种风格。
您似乎想使用 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 连接的问题是模棱两可的;两者都会发出相同的通知。