MySQLi возвращаемое значение запроса в случае выбора без соответствующих строк - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть таблица bank следующим образом:

|name|day|time|
|jack| 1 |  2 |

Мне нужно проверить name, day и time.Теперь, даже если я изменяю значения WHERE параметров условия, так что не найдено ни одной подходящей строки, он все равно выводит «success».Что здесь может быть не так?Ниже, если моя попытка кода:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT * FROM `bank` WHERE name='jack' AND day='1' AND time='2'";
$result = $conn->query($sql);

if ($result) 
{
        echo "success";
} 
else 
{
    echo "0 results";
}
$conn->close();
?>

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

от

    if ($result) 
{
        echo "success";
} 
else 
{
    echo "0 results";
}

Можете ли вы попробовать "mysql_num_rows($result) или mysqli_num_rows($result)"

нам нужно проверить, удовлетворяют ли какие-либо строки условию или нет, для этого нам нужно использовать num строк. теперь вы проверяете, выполняется запрос или нет, даже если условие неверно, запрос будет выполнен, поэтому вы получаете успех.

0 голосов
/ 13 сентября 2018

С MySQLi документация :

Возвращает FALSE при ошибке. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект mysqli_result. Для других успешных запросов mysqli_query () вернет TRUE

Так что, в принципе, даже если запрос не возвращает никаких строк, он все равно остается успешным. Вы должны скорее проверить количество возвращаемых строк. Измените ваше if состояние на:

If ($result->num_rows) {

Sidenote:

  1. Сейчас самое время предпринять правильные начальные шаги в работе с PHP-MySQL. Вместо использования функции запроса вы должны использовать Подготовленные операторы .
  2. Всегда использовать обработку исключений (try-catch), чтобы перехватывать другие ошибки во время выполнения запроса.

Вот эквивалентный код, использующий подготовленные операторы и обработку исключений:

try {

    // Prepare the query
    $stmt = "SELECT * FROM bank 
             WHERE name = ? 
               AND day = ? 
               AND time = ?";

    // Bind the parameters
    // assuming that your day and time are integer values
    $stmt->bind_param("sii", 'jack', '1', '2');

    // execute the query
    $stmt->execute();

    // Getting results:
    $result = $stmt->get_result();

    if ($result->num_rows === 0) {
        echo "0 results";
    } else {
        echo "success";

        // reading results
        while($row = $result->fetch_assoc()) {
            $name = $row['name'];
            $day = $row['day'];
            $time = $row['time'];
        }
    }

} catch (Exception $e) {

     // your code to handle in case of exceptions here
     // generally you log error details, 
     //and send out specific error message alerts
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...