我正在尝试连接到我的数据库(正在运行),并且我想选择表“ users”中的所有数据。当我显示数据时,fetch_assoc()
的while循环永远不会结束。我不明白为什么会这样。
有什么想法吗?
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My first project!</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php
$servername = "localhost";
$user = "root";
$password = "";
$db = "mydb";
$connection = new mysqli($servername, $user, $password, $db);
if($connection->connect_error) {
die("Es ist ein Fehler aufgetreten: $connection->connect_error");
}
$sql = "SELECT * FROM users";
$result = $connection->query($sql);
$resultArray = $result->fetch_assoc();
if($result->num_rows > 0) {
while($i = $resultArray) {
echo "ID: " . $i["id"] . "<br>Name: " . $i["username"];
}
}
?>
</body>
</html>
如果我尝试使用此版本,则该版本有效-因此我不明白为什么“我的版本”无效。我只是想稍微适应一下。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My first project!</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<?php
$servername = "localhost";
$user = "root";
$password = "";
$db = "mydb";
$connection = new mysqli($servername, $user, $password, $db);
if($connection->connect_error) {
die("Es ist ein Fehler aufgetreten: $connection->connect_error");
}
$sql = "SELECT * FROM users";
$result = $connection->query($sql);
if($result->num_rows > 0) {
while($i = $result->fetch_assoc()) {
echo "ID: " . $i["id"] . "<br>Name: " . $i["username"];
}
}
?>
</body>
</html>
答案 0 :(得分:1)
在您的版本中,您只是从数据库中获取了一行。在第二个代码段中,循环的每次迭代都从数据库中获取另一行,直到游标耗尽并且返回NULL
。
答案 1 :(得分:1)
就在这里导致无限循环:
while($i = $resultArray) {
这将导致代码一次又一次地将$resultArray
读入$i
(fetch_assoc
返回的第一行数据)中。 $resultArray
永远不会改变,$i
也不会改变,因此该表达式永远不会求值为false
。
您需要注意以下事项:
$resultArray = $result->fetch_assoc();
您仅从数据库中获取一行数据-您将无法使用$resultArray
从数据库中获取多个行。
因此第二个版本正确:
while($i = $result->fetch_assoc()) {