MYSQL更新语句不起作用,没有关联的错误

时间:2018-08-02 15:35:28

标签: php mysql sql-update

我已经看过几篇关于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语句不执行任何操作。没有错误消息,我的表也没有更改。

有什么想法吗?

谢谢!

2 个答案:

答案 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);
}