php - elseif 当 mysql 查询没有返回任何行时

标签 php mysql mysqli

我正在制作一个简单的时钟系统,允许员工记录他们的工作时间。

我有一个表,用于存储时间戳和天气,这是一个打卡或打卡的 Action 。根据给定用户的最后操作,会显示相反的选项。例如,如果最后一个 Action 是下类,那么呈现的 Action 应该是下类。

在用户没有使用系统的情况下,应该向他们提供签到选项。

$sql_status = "SELECT * FROM timeclock WHERE employeeid = $employee_number ORDER BY id DESC LIMIT 1";
if ($result=$mysqli->query($sql_status)) {
    while ($row = $result->fetch_row()){
        $timeclock_action = $row[2];
        $timeclock_timestamp = $row[3];
            if($timeclock_action=="out") {
                $forward_action = "clockin";
                $forward_action_label = "Clock in";
                $timeclock_status_label = "Last clock out: ";
            } elseif($timeclock_action=="in") {
                $forward_action = "clockout";
                $forward_action_label = "Clock out";
                $timeclock_status_label = "Clocked in: ";
            }
    }
} elseif(mysql_num_rows($result)==0) {
    $forward_action = "clockin";
    $forward_action_label = "Clock in";
    $timeclock_status_label = "You've never clocked in before";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}

我的想法是 elseif mysql 查询返回 0 行,变量将被相应地设置,但它们根本没有被设置。 我的想法哪里错了?谢谢!

最佳答案

您当前的逻辑是,如果查询失败 - 即查询返回false(不是它没有返回任何结果,而是执行完全失败),您检查返回的行数是否为零。

相反,您应该先执行查询,然后检查是否返回了任何行。您也不需要为多行循环,因为您只希望在查询中有一行包含 LIMIT 1

您还应该考虑使用准备好的语句而不是直接在查询中注入(inject)变量,并进行一些其他错误处理;因为错误不应该直接显示给用户(记录错误,并显示通用的“出错了”消息)。

// The query to be executed
$sql_status = "SELECT * FROM timeclock WHERE employeeid = $employee_number ORDER BY id DESC LIMIT 1";

// See if the query was successful or not
if ($result = $mysqli->query($sql_status)) {
    // If there are any rows returned
    if ($result->num_rows) {
        // Fetch rows - no need for a loop since you only expect one record (LIMIT 1 in the query)
        $row = $result->fetch_row();
        $timeclock_action = $row[2];
        $timeclock_timestamp = $row[3];

        if ($timeclock_action=="out") {
            $forward_action = "clockin";
            $forward_action_label = "Clock in";
            $timeclock_status_label = "Last clock out: ";
        } elseif ($timeclock_action=="in") {
            $forward_action = "clockout";
            $forward_action_label = "Clock out";
            $timeclock_status_label = "Clocked in: ";
        }
    } else {
        $forward_action = "clockin";
        $forward_action_label = "Clock in";
        $timeclock_status_label = "You've never clocked in before";
    }
} else {
    // The query failed
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}

关于php - elseif 当 mysql 查询没有返回任何行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352066/

相关文章:

php - 处理 SRP 身份验证和生成设备 key (PHP - 服务器端)

php - Laravel 关系返回 null

php - PHP 的 MySQL 语法问题

PHP:重命名没有扩展名的文件

php - SQL PHP 查询更新不起作用

mysql - Linq to SQL 和 MySQL 数据库

php - 忽略正在搜索的标点符号

php - Mac 原生 PHP/Mysql 安装,激活 PDO 驱动

php - 如何在 PHP/MySQL API 的结果集中查找字段的源数据库名称?

php - Kohana 3.3 不使用 MySQLi 驱动程序