如果找到多条记录

时间:2017-12-03 08:14:29

标签: php sql loops

我正在尝试检查某条记录是否符合以下条件:状态为“文件已关闭”,not_visible =“0”且status_date早于14天或更长时间。

如果满足条件,则将not_visible“0”更新为“1”。

只要用户登录,就会调用此方法。

问题: 即使找到10条记录,sql也只运行一次。如何循环它以完成更新找到的所有记录并在完成后退出语句?

global $conn;
$strSQLExists = "select lead_id as a, status_date as b, not_visible as c from tbl_progress where status = 'File Closed' and not_visible = '0' and status_date <= DATE_ADD(CURDATE(), INTERVAL -14 DAY)  ";
$rsExists = db_query($strSQLExists,$conn);
$data=db_fetch_array($rsExists);
if($data)
{
$sql = "UPDATE tbl_progress SET not_visible = '1' WHERE lead_id = '".$data["a"]."'";
CustomQuery($sql);
return false;
}
else
{
    // if dont exist do something else
}

建议只更新: 所以我们在这里:

UPDATE tbl_progress SET not_visible = '1' WHERE status = 'File Closed' and not_visible = '0' and status_date <= DATE_ADD(CURDATE(), INTERVAL -14 DAY)

1 个答案:

答案 0 :(得分:0)

仅使用更新语句(根据您的编辑)来解决问题。实际上,使用更新修复程序

  1. 循环问题,因为它更新了所有匹配的记录,而不仅仅是一个
  2. sql注入问题,因为没有传递参数而没有sql语句的字符串连接
  3. 如果在选择和更新
  4. 之间更改了某些内容,则可能会出现竞争条件问题

    它也会稍微提高效率,因为它将逻辑推送到db。

    简而言之:使用更新代替select + update将解决循环问题以及您不了解的其他一些问题,请使用它。