2011-12-26 57 views
4

我的MySQL表包含一個tinyint(1)值,我用它來存儲true或false值。在MySQL中插入一個PHP false

我有以下的PHP變量:

$name = ''; 
$description = ''; 
$active = true; 

現在我的SQL查詢如下:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', $active) "; 

這隻會工作,如果我的$活躍值是true。只要活動變量爲false,php將插入一個空字符串,而不是0,因此查詢將失敗。

在這樣的查詢中使用false的最佳方法是什麼?

我應該手動將false轉換爲'0'字符串嗎? 馬上更好地在PHP端使用stings嗎?換句話說聲明:$ active ='1'; 或者我能以某種方式讓PHP總是將false轉換爲'0'字符串?

感謝 邁克爾

+1

的可能重複(http://stackoverflow.com [可 '假' 在mysql中一些字符串匹配嗎?]/questions/8369379/can-false-match-some-string-in-mysql) – 2011-12-26 15:23:00

+0

您應該在數據庫中真正使用數據類型「bit(1)」。這隻會允許輸入'0'(假)和'1'(真)。 – Burgi 2017-03-16 15:39:53

回答

4

首先你的價值觀應使用mysql_real_escape_string或mysqli_real_escape_string或其它方法適合於您的數據庫連接進行轉義,以避免SQL注入,然後爲您的具體問題就假,你可以做這樣的事情:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".($active?1:0) .")"; 

或鑄造$主動爲int應該做的工作太多:

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('$name', '$description', ".((int) $active)).")"; 
+0

謝謝。我從我的實際代碼中簡化了這個問題。所有字符串都正確轉義:-)我希望有一個解決方案,而不必先轉換我的數據類型,但我想這是不可能的。 – 2011-12-26 15:36:07

+0

爲了避免雙重數據類型轉換,我已經使用$ bool?'1':'0'作爲第一個例子顯示,但返回的是字符串而不是整數。 – 2011-12-26 16:58:43

6

將您的變量來詮釋:

intval($active) 
0

使用mysql_real_escape_string功能...

$query = "INSERT into my_table (my_name, my_description, active) VALUES ('".mysql_real_escape_string($name)."', '".mysql_real_escape_string($description)."', ".mysql_real_escape_string (((int) $active))).")";