Я пытаюсь получить доступ к моей базе данных, чтобы получить некоторые данные, но он продолжает возвращаться со следующими ошибками.
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\default.php on line 84 Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\default.php on line 86
Я проверил соединение, и код правильно вводит данные, это просто запрос результатов, который не возвращает никаких значений. Лично я не вижу, где ошибка, потому что другие запросы, такие как INSERT и CREATE, работают отлично.
<?php mysqli_select_db($conn, $dbName); $sql = "SELECT * FROM tbl_users WHERE id = 1;"; $result = mysqli_query($conn, $sql); echo mysqli_num_rows($result); //Line 84 if (mysqli_num_rows($result) > 0) { //Line 86 while($row = mysqli_fetch_assoc($result)) { ... } } else { echo "0 results"; } ?>
Если вам нужна дополнительная информация, пожалуйста, спросите меня, и я попытаюсь ее предоставить.
Полный код:
//**Create Connection**// $conn = mysqli_connect($serverName, $username, $password); //**Check Connection**// if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } else { echo "<p>Connected successfully!</p>"; } //**Create Database**// $dbName = "myDB"; $sql = "CREATE DATABASE IF NOT EXISTS " . $dbName . " CHARACTER SET utf8 COLLATE utf8_general_ci;"; //Error Handling if (!mysqli_query($conn, $sql)) { echo "Error creating database: " . mysqli_error($conn); } else { echo "<p>Database created successfully!</p>"; } //**Create Table**// mysqli_select_db($conn, $dbName); $tbl_name = "tbl_users"; $sql = "CREATE TABLE IF NOT EXISTS " . $tbl_name . " (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, firstName VARCHAR(64) NOT NULL, lastName VARCHAR(64) NOT NULL, userEmail VARCHAR(256) NOT NULL, reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP) CHARACTER SET utf8 COLLATE utf8_general_ci;"; //Error Handling if (!mysqli_query($conn, $sql)) { echo "Error creating table: " . mysqli_error($conn); } else { echo "<p>Table '" . $tbl_name . "' created successfully!</p>"; } mysqli_select_db($conn, $dbName); $sql = "SELECT * FROM tbl_users WHERE id = 1"; $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); if (!$result = mysqli_query($conn, $sql)) { printf("Errormessage: %s\n", mysqli_error($conn)); } if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { echo $row . "<br>"; } } else { echo "0 results"; }
Ваш код в порядке. Попробуйте выполнить этот SQL-запрос в базе данных …
вы не показываете нам весь ваш код.
У вас есть 2 одновременных вызова, и вы получаете сообщение об ошибке
Проблема здесь:
Вы используете mysqli_query()
два раза в этом фрагменте кода:
$result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); if (!$result = mysqli_query($conn, $sql)) { printf("Errormessage: %s\n", mysqli_error($conn)); }
Вам нужно удалить его и сделать:
if (!$result) { printf("Errormessage: %s\n", mysqli_error($conn)); }
при добавлении маршрута эвакуации else{...}
и affected_rows()
.
Редактировать:
Это вы используете $conn
дважды и не используете ссылку на переменную для вашего запроса:
mysqli_select_db($conn, $dbName); $sql = "SELECT * FROM tbl_users WHERE id = 1"; $result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
Измените его и используйте 4- mysqli_connect()
схему mysqli_connect()
, так как БД уже была создана в этот момент: (предположим, что идентификатор «1» уже создан над этим).
$dbName = "myDB"; $conn = mysqli_connect($serverName, $username, $password, $dbName); $sql = "SELECT * FROM tbl_users WHERE id = 1"; $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); if (!$result) { printf("Errormessage: %s\n", mysqli_error($conn)); } else{ echo "Success"; }
или путем удаления or die(mysqli_error($conn))
и получения ошибки, переданной после, если она есть.
$dbName = "myDB"; $conn = mysqli_connect($serverName, $username, $password, $dbName); $sql = "SELECT * FROM tbl_users WHERE id = 1"; $result = mysqli_query($conn, $sql); if (!$result) { printf("Errormessage: %s\n", mysqli_error($conn)); } else{ echo "Success"; }
(дополнительное редактирование)
Вы также можете попробовать этот метод и использовать в сочетании с тем, что я уже сказал выше:
$numrows = mysqli_num_rows($result); if($numrows > 0){ // do something }
Добавьте отчет об ошибках в начало файла (ов), который поможет найти ошибки.
<?php error_reporting(E_ALL); ini_set('display_errors', 1); // rest of your code
Sidenote: Сообщение об ошибках должно выполняться только в стадии постановки и никогда не выпускаться.
используйте mysqli_error();
чтобы увидеть, где проблема
mysqli_free_result($result); if (!$result = mysqli_query($conn, $sql)) { printf("Errormessage: %s\n", mysqli_error($conn)); }
если ваш ответ «Errormessage: команды не синхронизированы, вы не можете запустить эту команду сейчас», тогда я думаю, ваша проблема в том, что вы все еще подключены в другом запросе, добавьте mysqli_free_result($result);
перед кодом выше, чтобы увидеть реальную ошибку.
Я не думаю, что что-то не так с вашим кодом, но есть некоторые проблемы с вашим стилем программирования. Вы должны попробовать это
$conn = mysqli_connect('host', 'username', 'password', 'database', '[option port number]') or die('<h1>Error connecting to database server</h1>'); //=> the optional port number defaults to 3306 - recommended if your database is hosted on a live server else leave blank if ($conn) { $query = "SELECT * FROM `tbl_users` WHERE `id` = 1"; //if id is unique this should just be a single row from your database $result = $mysqli_query($dbc, $query) or die("Invalid query sytax" . mysqli_error($conn)); if($result){ echo "The number of rows are(is) " . mysqli_num_rows($result); while($row = mysqli_fetch_assoc($result)) { //do stuff here or remove while loop and var_dump() } } else { echo "No record found"; } }