mysqli查询在select没有匹配行的情况下返回值

vd2z7a6w  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(312)

我有一张table 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();
?>
tuwxkamq

tuwxkamq1#

来自mysqli文档:
失败时返回false。如果选择、显示、描述或解释查询成功,mysqli\u query()将返回mysqli\u result对象。对于其他成功的查询,mysqli\u query()将返回true
所以基本上,即使查询不返回任何行,它仍然是一个成功的查询。您应该检查返回的行数。改变你的想法 if 条件到:

If ($result->num_rows) {

旁注:
现在正是正确地开始使用php-mysql的时候。与其使用查询函数,不如使用准备好的语句。
始终使用异常处理( 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
}
lo8azlld

lo8azlld2#

代替

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

你能试试吗 mysql_num_rows($result) 或者 mysqli_num_rows($result) "
我们需要检查是否有任何行满足条件,我们需要使用num rows。现在您正在检查查询是否运行,即使条件不正确,查询也会运行,这就是您获得成功的原因。

相关问题