根据条件创建mysql更新字符串

时间:2015-07-04 06:15:18

标签: php mysql

我有参数列表及其值。我想根据值是否存在来构建mysql更新字符串。检查使用if条件的一种方法如下

if (!empty($value['p_status']) || !empty($value['quantity'])){
      $strSet = '';
      if (!empty($value['p_status'])) {
             $strSet .= "status='$value[p_status]',";
       }
      if (!empty($value['quantity'])) {
            $strSet .= "amount='$value[quantity]',";
      }
      if (!empty($value['shipping_freight'])) {
          $strSet .= "shipping_freight='$value[shipping_freight]',";
      }
   }
   $strSet = trim($strSet,',');
   db_query("update table1 set ".$strSet." where pr1=123");

但可能有很多参数。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

为了避免在条件下写这么多,只需使用循环。

foreach($values as $key=>$value)
{
    if(!empty($value))
        str = str." $key = '$value',";
}
$str=trim($str,',');

答案 1 :(得分:0)

如果你的$value数组可以使用与MySQL字段名相同的密钥,那么就更简单了! 例如如果$value['p_status']可能只是$value['status']$value['quantity']可能是$value['amount'],那么您可以执行以下操作:

$strSet = '';
foreach ($value as $field_name=>$field_value) {
  if (!empty($strSet)) $strSet .= ',';
  if (!empty($field_value)) $strSet .= "{$field_name}='{$field_value}'";
}
db_query("update table1 set ".$strSet." where pr1=123");

哦,记住:
在PHP中,empty()函数将返回true为NULL,空字符串为零 - 因此,如果数量/金额为零,则您的sql不会更新字段!
此外,您应该真正逃避您正在更新的值以防止sql注入。