【问题标题】:How to update a record based on if previous fields are occupied? [closed]如何根据先前的字段是否被占用来更新记录? [关闭]
【发布时间】:2013-11-11 12:03:44
【问题描述】:

我的语法是否有问题,它没有在我的 php 脚本中执行?我没有更新我试图更新的所有记录,其中 invoice_no 等于另一个表单中的“$id”,但只有当 pp1_dt、pp1_amt、pp1_ref 为空时,否则继续到 pp2_dt、pp2_amt、pp2_ref 等等到 5。

$i=1;

while($i <= 5) {
    $pp_sql =  "UPDATE Invoices SET pp'$i'_dt = '$pp1_dt', pp'$i'_amt = '$pp1_amt', pp'$i'_ref = '$pp1_ref' where invoice_no='$id' AND (coalesce(pp'$i'_dt, pp'$i'_amt, pp'$i'_ref) is null)"; 

    if($db->exec($pp_sql)) {
        $p_num = $i; 
    }
    else {
        $i++;  
    }
}

【问题讨论】:

  • 您要更新记录吗?
  • 这不是有效的 PHP,请检查给定的错误消息以修复它。
  • 不要为每个INSERT发送新查询
  • 不更新我尝试更新的所有记录,其中 invoice_no 等于另一个表单中的 id,但前提是 pp1_dt、pp1_amt、pp1_ref 为空,否则转到 pp2_dt、pp2_amt、pp2_ref 等等到 5.
  • 不明白为什么你们投了反对票而你不能帮助我?

标签: php mysql


【解决方案1】:

你不能在你的字符串中使用你的计数器变量,你需要连接它

$pp_sql =  "UPDATE Invoices SET pp" . $i . "_dt = '$pp1_dt', pp" . $i . "_amt = '$pp1_amt', pp" . $i . "_ref = '$pp1_ref' where invoice_no=" . $id . " AND (coalesce(pp" . $i . "_dt, pp" . $i . "_amt, pp" . $i . "_ref) is null)";

按照您现在编写的方式,它试图在您的表中查找名为 pp$i 的列,而不是不存在的 pp1、pp2 等。

【讨论】:

  • 更改$pp_sql后查询仍然无法执行
【解决方案2】:

Shenir,如果您想更新任何记录,那么您应该尝试使用 UPDATE 而不是 INSERT。如果您希望 INSERT & UPDATE 使用相同的查询而不是使用重复记录的键。

我建议你应该阅读这篇文章http://dev.mysql.com/doc/refman/5.5/en/insert-on-duplicate.html

【讨论】:

  • 我将我的 sql 更改为 "$pp_sql = "UPDATE Invoices SET pp'$i'_dt = '$pp1_dt', pp'$i'_amt = '$pp1_amt', pp'$i' _ref = '$pp1_ref' 其中 invoice_no='$id' AND (coalesce(pp'$i'_dt, pp'$i'_amt, pp'$i'_ref) 为空)";"没有任何运气。
猜你喜欢
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 2020-07-02
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2021-10-02
  • 2012-10-31
相关资源
最近更新 更多