听起来确实如此,我的检索语句都没有按应有的方式检索数据。这很奇怪,好像我复制了确切的查询并将其放入 phpMyAdmin 并在那里运行它,它会返回应有的结果。
插入语句和类似的工作,例如:
// On first connect to database, create a user to hold data for users not logged in
$result = $db->query("SELECT id FROM users WHERE id = 1");
if ($result->num_rows == 0) {
$db->query("INSERT INTO users (id, username, email, password) VALUES (1, 'anonymous', 'anonymous', '" . password_hash("...", PASSWORD_BCRYPT) . "')");
}
并且用户按预期输入。
但是,如果我运行这样的语句:
$result = $db->query("SELECT id, username, password FROM users WHERE email = $email");
$row = $result->fetch();
我收到以下错误:“致命错误:调用非对象上的成员函数 fetch()”
在 phpMyAdmin 中运行完全相同的语句会按预期返回该行。
但是,它仅适用于一个领域:
if ($result = $db->query("SELECT username, wins, losses FROM users ORDER BY wins DESC LIMIT 10")) {
while ($row = $result->fetch_assoc()) {
echo "<tr><td>" . $row["username"] . "</td> <td>" . $row["wins"] . "</td> <td>" . $row["losses"] . "</td></tr>\n";
}
}
它返回预期的结果。不过,我不知道为什么。
我不确定我的文件结构是否重要,我有一个需要的 config.php 文件,它包含连接信息。其余的在我的 index.php 文件中。
这是config.php:
<?php
$db_host = $_SERVER["SERVER_NAME"];
$db_user = "...";
$db_pass = "...";
$db_database = "hangman";
$db = new mysqli($db_host, $db_user, $db_pass, $db_database);
if ($db->connect_error) {
echo "Could not connect to database.";
exit;
}
// On first connect to database, create a user to hold data for users not logged in
$result = $db->query("SELECT id FROM users WHERE id = 1");
if ($result->num_rows == 0) {
$db->query("INSERT INTO users (id, username, email, password) VALUES (1, 'anonymous', 'anonymous', '" . password_hash("...", PASSWORD_BCRYPT) . "')");
}
?>
我可以包含更多我的 PHP,请说什么,这让我发疯。