2015-02-11 86 views
-2

我有一個數據庫包含成千上萬的行,用戶可以通過提供更新的值更新他/她的行,我需要更新行只有非空值由用戶,如果由用戶所提供的值是空的先前的數據應該被保持,例如:只更新非空輸入值在MySQL中使用PHP

id=1 
name = John 
address = USA 

如果用戶提供空值和地址與英國值名稱那麼數據應該是:

id=1 
name =John 
address = UK 

任何幫助與PHP代碼示例將不勝感激。

+1

http://php.net/is_null和/或http://php.net/empty – ceejayoz 2015-02-11 20:22:02

+2

發佈您嘗試的代碼。 – developerwjk 2015-02-11 20:22:57

+0

是的,但如果我有超過20的價值,它不容易檢查每個值 – 2015-02-11 20:22:59

回答

1

您應該遍歷超全局的$_POST並構建一個不包含空值的插入新數組,然後將其用於查詢而不是直接使用$_POST

$update = array(); 
foreach ($_POST as $key => $value) { 
    if(!is_null($value) && !($value == '')) 
     $update[$key] = $value; 
} 

然後使用$update您所查詢的參數,不應包含任何null值或空值。

-1

我用PDO連接

首先創建一個表並插入如下

create table testing(id int(11), name varchar(100),address varchar(200)); 

insert into testing values(100,'Null','California'); 
insert into testing values(200,'sectona','California'); 

pdo_connect.php

<?php 




$db = new PDO (
    'mysql:host=localhost;dbname=yourdbname;charset=utf8', 
    'root', // username 

    'root' // password 
); 
?> 

<?php 


pdo_connect.php 


// from form inputs 
/* 
$id=$_POST["id"]; 
$name=$_POST["name"]; 
$address=$_POST["address"]; 
*/ 




// direct variable initialisation 
/* 
$id='100'; 
$name = 'John'; 
$name = 'Null'; 
$address = 'California'; 
*/ 

// initialize a null value 
$check ='Null'; 



// check null value for name variable in the first insert statement 
$resultn = $db->prepare('SELECT * FROM testing where name = :name'); 

     $resultn->execute(array(
      ':name' => 'Null' 
    )); 

while ($row = $resultn->fetch()) 
{ 
$nm = $row['name']; 
} 


if ($nm == $check) 
{ 
echo '<b><font color=red><b></b>You cannot update with a Null Value</font></b>'; 
exit(); 
} 


// update if name is not null 



$update = $db->prepare(' 
      UPDATE testing SET 
      name = :name,address = :address 
      WHERE id= :id'); 

     $update->execute(array(
      ':name' => 'yourname', 
      ':address' => 'USA', 
':id' => '100' 
)); 

echo 'update successful'; 
?> 

finall利用數據庫中的非空值進行更新,然後代以下代碼在查詢語句中

$resultn = $db->prepare('SELECT * FROM testing where name = :name'); 

     $resultn->execute(array(
      ':name' => 'sectona' 
    )); 
+0

請不要要求用戶將你的標記標記爲正確。你的答案將根據其優點來判斷,而不是懇求。 – ceejayoz 2015-02-12 04:25:15