2014-07-26 46 views
0

我正在更新php/SQL中的表單。該表單成功更新MYSQL,但它會刪除所有空字段。我想嘗試一個CASE語句,根據表單是否有條目進行更新。有條件的SQL更新CASE

CASE 
WHEN (variable is set/is not null?) UPDATE `sales` SET `company` ='$company' 
END CASE 

我找不到檢查變量是否爲NULL的方法。那可能嗎?什麼是語法?

//可能不需要的額外註釋 下面是關於我在做什麼的信息。這與問題本身無關,但我看到人們更喜歡獲取更多信息。表單提交給一個類和構造函數。我正在研究依賴注入類,但這似乎是矯枉過正。

<?php 
echo "<html> 
<form method='POST'>   
<fieldset>    
<input id='company' name='company' type='text' class='form-control' placeholder='". $company. "'>"; 
</fieldset> 
</form> 
</html> 
?> 

的職位:

<?php 
if(isset ($_POST ["company"])){ 
require 'updatereq.php'; 
//$update is the constructor 
$update= new Salesupdateentry (($_POST ["company"])); 
//update is just the SQL update in a php function, which works, but deletes blanks  
$update->__update(); 
?> 

//請注意 - 我已經瘦了一個變量,但實際上有7我試圖使其更具可讀性,但如果簡單( isset($ _ POST [「company」]))將不起作用,因爲還有6個其他POSTS-具有需要POST的構造函數。這就是爲什麼我想這樣做SQL的原因

<?php 
class Sales 
{ 
public $company; 
private $db; 
public function __construct($company) 
{ 
    $this->company = $company; 
    $this->db =mysqli_connect("localhost", "databasename", "password", "table"); 
} 

public function __save() 
{ 
$this->company=htmlspecialchars($this->company); 

$sql = ("INSERT INTO " . "`sales` " . "(`company`)" . " VALUES " . "('{$this->company}') ;"); 
return mysqli_query($this->db, $sql); 
} 
} 
+0

你也可以用insert語句顯示'Salesupdateentry'的部分嗎? – Fabricator

+0

發出查詢的實際php代碼也是相關的。看到你在你的SQL中插入字符串,可以肯定地猜測你正在使用一個標有日期的數據庫接口sans prepared statements。在這種情況下,來自PHP的NULL值將以空字符串結尾。 – mario

+0

好的,我編輯了它。 –

回答

0

你不能檢查是否一個PHP變量設置MySQL內。

更好而穩定的方法是檢查PHP中的變量是否爲null並執行相應的SQL語句。

如果你的變量是一個MySQL變量,你可以檢查它是否爲空,如下所示:

CASE WHEN TABLE.FIELD IS NOT NULL... 

您也可以使用用於這一目的的IFNULL()功能。

NULL值不能用於MySQL中的條件運算符,因此您不能使用<, > or =。相反,您必須使用IS NULLNOT NULL

+0

+1哦,你說得對。我將在php中使用它。我沒有考慮分解SQL UPDATE。 –

0

請嘗試下面的代碼。我沒有檢查這個。但希望這會起作用

CASE 
WHEN (variable IS NOT NULL) UPDATE `sales` SET `company` ='$company' 
END CASE