我有参数列表及其值。我想根据值是否存在来构建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");
但可能有很多参数。有没有更好的方法呢?
答案 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注入。