2015-07-04 4 views
0

У меня есть список параметров и их значений. Я хочу построить строку обновления mysql на основе наличия или отсутствия значений. Один из способов проверить использование, если условие нижесоздание строки обновления mysql на основе условий

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

loop it like 'foreach ($ value as $ key => $ value)' then 'if (! Empty ($ key))' –

ответ

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.

+0

Спасибо Wee Zel :) –

2

Чтобы избежать записи многих условий, просто используйте цикл.

foreach($values as $key=>$value) 
{ 
    if(!empty($value)) 
     str = str." $key = '$value',"; 
} 
$str=trim($str,','); 
Смежные вопросы