2012-09-02 51 views
0

好了,所以基本上是最簡單的查詢過...我已經做了上萬遍......MySQL的SELECT WHERE返回空與長的數字,雖然他們在那裏

SELECT * 
FROM purchased_items 
WHERE uid = '$uid' 

如果$uid == 123它的工作原理罰款和行,其中uid是123

如果$uid == 351565051447743它返回空,則返回全部數據...

我肯定351565051447743是在某些行可能uid,我簡直複製和粘貼文本入T他表。

$ uid是一個字符串,並以字符串形式傳遞。

這是我做了一百萬次,我從來沒有這個簡單的查詢不工作。

任何想法爲什麼這不起作用?

+1

向我們展示您的數據庫架構 – jeremy

+1

在PHP中,這是一個32位的服務器嗎? '$ uid'的類型是一個int還是字符串?即使該值存儲爲BIGINT,但如果PHP在32位服務器上運行,則不能超過4,294,967,295無符號。 –

+0

$ uid是以字符串形式傳遞的。我在小引號中用'$ uid'更新了原始文章,因爲那是它在php類中的實際情況。 – brybam

回答

0

好了,所以如果你使用AMFPHP顯然,如果你「投」的值作爲查詢字符串,當你使用瀏覽器進行測試也沒關係。您需要在瀏覽器界面的字符串中使用引號。

0

您可能會從double中獲得E {some_power}表示形式的字符串。

我的意思是

$query1 = "SELECT * FROM purchased_items WHERE uid = '$uid'"; 

產地:

SELECT * FROM purchased_items WHERE uid = '3.5156505144774E+14' 

一個解決它的方法是:

$query = sprintf("SELECT * FROM purchased_items WHERE uid = '%d'", $uid); 

不知道SQL支持Ë格式,所以這可能或不是問題。 http://viper-7.com/v6MhVe

DIT:快速的解決方法

$format = (is_numeric($uid)) ? '%d' : '%s'; 
$query2 = sprintf("SELECT * FROM purchased_items WHERE uid = '{$format}'", $uid);; 
+0

即使我把它作爲一個字符串傳遞,這仍然會發生嗎? UID有機會擁有角色。所以我不能真正使用一個總是假設其數字爲 – brybam

+0

好點的解決方案。我不確定。檢查你生成的查詢,看看這是否真的是這個特定ID的問題。 – tigrang

+0

你是如何檢索價值的。爲什麼它開始時是雙重的。 – tigrang

0

什麼是uid你的桌子上的數據類型?如何將uid轉換爲另一種數據類型?

SELECT * 
FROM purchased_items 
WHERE CAST(uid AS VARCHAR(25)) = '$uid' 
相關問題