2013-03-26 97 views
0

當我試圖獲得「出售」和「特色」的價值時,我什麼也得不到。我究竟做錯了什麼?如何將boolean參數傳遞給php函數?

function list_products($sold = false, $featured = false) { 
    global $link; 
    $result = mysqli_query($link, "SELECT * FROM products product JOIN images image ON product.id = image.product_id WHERE product.main_image = image.id AND product.sold = $sold AND product.featured = $featured") or die(mysqli_error($link)); 
} 

list_products(false, true); 

編輯:如果我嘗試echo $ sold或$ featured,它們是空白的。應顯示1或0。

+2

使用'FALSE',空白參數將被使用(嘗試'回聲TRUE'和'回聲FALSE'看到),進而導致您的SQL看起來像'SELECT * FROM表WHERE var =;' – Rawkode 2013-03-26 12:43:26

+0

是的,這似乎是發生了什麼。我可以不使用布爾值作爲函數參數嗎? – Sam 2013-03-26 12:51:36

+0

你如何「檢查」變量是「空白」?你瞭解[*布爾規則*爲布爾值](http://www.php.net/manual/en/language.types.string.php#language.types.string.casting)嗎?如果你真的想知道一個變量的內容,不要'echo'它,'var_dump()'它。 – deceze 2013-03-26 12:53:47

回答

-5

在你的情況下,你可以在調用該函數時給出參數的數值(無論如何你都要在數據中使用它們)。

嘗試:

function list_products($sold = 0, $featured = 0) { 
    global $link; 
    $result = mysqli_query($link, "SELECT * FROM products product JOIN images image ON product.id = image.product_id WHERE product.main_image = image.id AND product.sold = $sold AND product.featured = $featured") or die(mysqli_error($link)); 
} 

list_products(0, 1); 
+3

'首先,當PHP解析器在調用一個函數時遇到「false」作爲參數時,它會停止讀取更多參數。' 我不同意。 ? ' Aeisor 2013-10-09 19:33:47

+3

這絕對是錯誤的...沒有雙關語意圖。但嚴重的是,這是不好的信息,應該永遠不會被接受爲答案。請參閱此處:http://pastebin.com/GGATGD5X – 2014-03-19 17:44:08

5

在PHP中爲mysql查詢字符串的鑄造布爾值不是一個好主意 - true將變爲'1',false將變爲''。使用類似($boolVar ? 1 : 0)的東西。

+0

這個問題似乎並不是MySQL。這似乎是變量甚至沒有被傳遞給函數。無論什麼原因,變量都是空白的。 – Sam 2013-03-26 12:46:30