php - elseif 当 mysql 查询没有返回任何行时
问题描述
我正在制作一个简单的时钟系统,允许员工记录他们的工作时间。
我有一个存储时间戳和天气的表,这是一个打卡或打卡操作。根据给定用户的最后一个操作,会显示相反的选项。例如,如果最后一个动作是打卡,那么呈现的动作应该是打卡。
在用户没有使用系统的情况下,他们应该看到一个打卡选项。
$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
查询中有一行。
您还应该考虑使用准备好的语句而不是直接在查询中注入变量,并进行其他一些错误处理;因为错误不应该直接显示给用户(记录错误,并显示一般的“出错了”消息)。
// 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;
}
推荐阅读
- bootstrap-modal - Bootstrap v5,如何在模态中传递变量(没有jquery)
- java - 使用https ressources生成pdf(带飞碟/itext)
- c++ - C++:MSVC 仅使用 Boost::asio 检测到语法错误
- javascript - Vuejs v-html 在包含其他元素的元素上
- java - 如何使用 FOR 循环打印前 N 个以 3 结尾的素数?
- django - 如何避免查询集中的重复值
- rust - async_std 1.8 对 `async_std::channel` 中的项目有未解决的导入
- php - 在 PHP 中模 64 位整数时的惊人限制
- r - 根据 r 中的另一个索引值按组重新排序行
- docker - Docker如何将图像推送到带有证书签名的工件