2014-09-30 36 views
0

我想使它只能被設置一次,通過使它只能被更新或設置,如果它等於null。出於某種原因,即使值等於類似於「Steve」的值,PHP仍然會迴應成功。我究竟做錯了什麼?SQL更新文本值,如果空不工作

PHP:

<?php 
$dbhandle = mysql_connect($hostname, $username, $password) 
    or die("Unable to connect to MySQL"); 

//select a database to work with 
$selected = mysql_select_db("???????",$dbhandle) 
    or die("Could not select examples"); 

if(empty($_POST['OrderID']) || empty($_POST['UserName'])){ 
      echo 'Failed. Fill out all fields.'; 
     } 
else{ 
     $sql = mysql_query("SELECT * FROM orders WHERE order_id = '".$_POST['OrderID']."' AND LENGTH(accepter_name)= 0"); 
     $row = mysql_fetch_row($sql); // get the single row. 
     echo $row['accepter_name']; // display the value.  

     if($row['accepter_name']==''){ 
      $sql = mysql_query("UPDATE orders SET accepter_name= '".$_POST['UserName']."' WHERE order_id='".$_POST['OrderID']."'"); 
        echo "Success"; 
     } 
     else{ 
     echo "Failed"; 
     } 
} 
mysql_close($dbhandle); 
?> 

當我檢查數據庫,受主名稱值被改變。

+0

修改了代碼。仍然沒有工作。即使它有一個值,它仍然更新( – TastyLemons 2014-09-30 08:20:55

+0

)。 – TastyLemons 2014-09-30 08:32:26

+0

是的,這就是我想要的。但是由於某種原因,即使該值有某些內容,它也會更新。 – TastyLemons 2014-09-30 08:39:30

回答

1

您可以使用if(mysql_affected_rows($sql) == 1) instead of if($sql) ,因爲sql已執行,並且它不會返回任何受影響的行。 因此,如果你檢查受影響的行,它應該返回1當你的SQL更新至少有一行在你的表

+0

使用此方法,無論插入什麼內容都無效。 – TastyLemons 2014-09-30 08:27:11

+0

這不是答案。評論下面的問題。 – 2014-09-30 08:43:08

+0

@Prashant,你可能不喜歡這個答案,但它是一個答案。我很感謝你會看到有經驗的成員要求回答者作爲評論作出不回答的評論,但這不適用於IMO的情況。我建議你只在顯然不是答案時才發表這些評論(例如,尋求澄清,詢問相關問題),在這種情況下,你可以將其標記給主持人。 – halfer 2014-09-30 21:18:06

0

爲什麼不使用IS NULL在where子句來檢查accepter_name?

+0

無論是否爲空,它仍會插入。 – TastyLemons 2014-09-30 08:28:42

+0

這不是答案。評論下面的問題。 – 2014-09-30 08:43:30

+0

我不行。沒有足夠的信譽點來評論 – TariqK 2014-09-30 08:49:05