我已经看过几篇关于MySQL中UPDATE语句的文章,但是似乎没有一篇适用于我的具体情况。
我有以下代码:
$result = "SELECT iso_date FROM open_lab_report WHERE iso_date = current_timestamp";
if(!mysqli_query($link, $result)) {
$sql = "INSERT INTO open_lab_report (iso_date, lab_monitor, incidentReport) VALUES (current_timestamp, '$lab_monitor', 1)";
}else{
$sql = "UPDATE open_lab_report SET incidentReport = 1 WHERE iso_date = current_timestamp";
}
if(!mysqli_query($link, $sql)) {
echo "Query failed, code: " . mysqli_errno($link);
}
本质上,我正在尝试检查是否存在条目。如果存在,请对其进行更新。如果该条目不存在,则进行输入。
INSERT语句执行完美。但是,UPDATE语句不执行任何操作。没有错误消息,我的表也没有更改。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
如Forbs所述,您的UPDATE语句将不会导致任何更改,因为您是基于“ current_timestamp”进行过滤的,这将是查询执行的任何时间。相反,您需要做的是将现有时间戳记传递到代码中,以便它更新任何已有记录作为iso_date的记录。
有关如何更改代码的信息,请参见下面的示例。
//this is whatever your time is that you are looking for a record for
$isoDateDT = '2018-08-01 08:15:00';//human readable datetime
$isoDateTS = strtotime($isoDateDT);//unix timestamp
$result = "SELECT * FROM open_lab_report WHERE iso_date = $isoDateTS";
if(!mysqli_query($link, $result)) {
$sql = "INSERT INTO open_lab_report (iso_date, lab_monitor, incidentReport) VALUES ($isoDateTS, '$lab_monitor', 1)";
} else {
$sql = "UPDATE open_lab_report SET incidentReport = 1 WHERE iso_date = $isoDateTS";
}
if(!mysqli_query($link, $sql)) {
echo "Query failed, code: " . mysqli_errno($link);
}
答案 1 :(得分:0)
您必须更正if语句检查。 在您的案例中,您可以计算与当前时间戳相同的时间戳的条目数。 然后
如果count <1,则可以UPDATE,否则INSERT。
示例:
$result = "SELECT iso_date FROM open_lab_report WHERE iso_date = current_timestamp";
$row=mysqli_num_rows(mysqli_query($link, $result))
if($row<1){
$sql = "INSERT INTO open_lab_report (iso_date, lab_monitor, incidentReport) VALUES (current_timestamp, '$lab_monitor', 1)";
}else{
$sql = "UPDATE open_lab_report SET incidentReport = 1 WHERE iso_date = current_timestamp";
}
if(!mysqli_query($link, $sql)) {
echo "Query failed, code: " . mysqli_errno($link);
}