2013-03-20 5 views
2

Я создаю форму для обновления нескольких столбцов данных. Этот код был частично успешным для моих целей. Единственное, что осталось сделать, это включить (если IS NOT NULL) для запроса на обновление. Я не уверен, как это сделать.PHP/MYSQL UPDATE только если значение не равно

Другими словами, я хочу, чтобы UPDATE выполнялся, если значение $ _POST не пустое.

<form> 
<input type='text' name='input1' /> 
<input type='text' name='input2' /> 
<input type='text' name='input3' /> 
<input type='submit' value='submit' /> 
</form> 

<?php 
//db connect 

$1=$_POST['input1']; 
$2=$_POST['input2']; 
$3=$_POST['input3']; 

mysql_query("UPDATE table 
      SET a = $1 
       b = $2 
       c = $3 
      WHERE row = 'row_id"); 

); 


?> 

Заранее благодарим за помощь.

(Чтобы избавить вас от некоторого дополнительного ввода текста, мой исходный код ускользает от символов, поэтому предупреждения SQL-инъекций не нужны. Я также в процессе ознакомления с «mysqli_query», поэтому не нужно комментировать это либо.)

ответ

13

Вы можете использовать COALESCE

 UPDATE table 
     SET a = COALESCE($1, a), 
      b = COALESCE($2, b), 
      c = COALESCE($3, c) 
     WHERE row = '' 
+0

Это работало для меня, но я должен был изменить два места значение –

0

Попробуйте с помощью простого codition

$1 = isset($_POST['input1'])? $_POST['input1'] : 'a'; 
$2 = isset($_POST['input2'] ? $_POST['input2'] : 'b'; 
$3 = isset($_POST['input3'] ? $_POST['input3'] : 'c'; 


if(count($_POST) > 0){ 

    mysql_query("UPDATE table 
       SET a = $1 
        b = $2 
        c = $3 
       WHERE row = 'row_id"); 

    ); 
} 
+0

** Примечание **: Он будет обновляться, если какой-либо один значение не равно нулю, и другие являются. – Rikesh

1
<?php 
$query="UPDATE table SET" 
$query.=(!empty($_POST['input1']))? "a=$1,":""; 
$query.=(!empty($_POST['input2']))? "b=$2,":""; 
$query.=(!empty($_POST['input3']))? "c=$3,":""; 
$query=substr($query,0,-1); 
$query.="WHERE row = 'row_id'" 
mysql_query($query); 
?> 
1

Try с этим:

$updateList = array(); 
if(!empty($_POST['input1'])) { 
    $updateList[] = 'a = '.$_POST['input1']; 
} 

//Do it for every input... 

if(!empty($updateList)) { 
    $sql = 'UPDATE table SET '.implode(', ', $updateList).' WHERE row = 1'; 
} 

Обратите внимание, что я не ускользнуло/цитата ничего, так как вы сказали, что вы знаете, как это сделать.

1
COALESCE 

решение. Это похоже на NVL от Oracle. Вы можете использовать его, как показано ниже в подготовленном заявлении с использованием параметров

UPDATE 
    tbl_cccustomerinfo 
SET 
    customerAddress = COALESCE(?,customerAddress), 
    customerName = COALESCE(?,customerName), 
    description = COALESCE(?,description) 
WHERE 
    contactNumber=? 
1

Просто сделать массив из них. Как так:

if(empty($_POST['input1']) && empty($_POST['input2']) && empty($_POST['input3'])) { 
    return false; 
    } else { 
    $updates = array(); 

    if(!empty($_POST['input1'])) 
    $updates[] = 'a='".$_POST['input1']."'; 

    if(!empty($_POST['input2'])) 
    $updates[] = 'b='".$_POST['input2']."'; 

    if(!empty($_POST['input3'])) 
    $updates[] = 'c='".$_POST['input3']."'; 


     $query = "UPDATE table SET".$updates."WHERE row_id=''"; 
     $sth = $sth->connect->prepare($query); 
     $sth->execute(); 

     )); 
    } 
Смежные вопросы