P粉8264299072023-08-14 15:05:22
首先,你必須接受這個事實:如果你的查詢沒有找到任何行,那就意味著沒有匹配,即使你可以發誓資料是正確的。當查詢傳回沒有行時,就沒有行與條件相符。所以你必須找出原因。但首先你需要確保你的查詢是正確的:
首先你需要確保你的查詢實際上沒有錯誤,因為「沒有結果」可能意味著查詢中有錯誤。有關詳細信息,請參考這些答案:pdo和mysqli。
檢查你的條件。有一些互斥的條件,例如WHERE col=1 AND col=2
。它永遠不會傳回任何行。嘗試簡化條件,直到它開始傳回一些行,然後細化條件以獲得所需的結果。
但是好吧,沒有錯誤,條件是正確的,你可以發誓表中有資料與你的查詢相符。然而,還是有一些陷阱:
首先,在涉及變數的情況下,確保它存在並且實際上包含一些值。
然後檢查值本身。輸入資料(或資料庫)中可能存在一些轉換或不可列印的字元。例如換行或特殊編碼的符號,或一些字元如<
和>
轉換為HTML實體。結果是,查詢包含<abc@abcs.com>
將永遠不會匹配文字<abc@abcs.com>
。為了快速檢查,你可以使用rawurlencode()
函數,它會將所有非拉丁字元轉換為程式碼,從而使它們可見。
問題是,這只是一個猜測,沒有人能告訴你實際的問題是什麼,因為這是你的資料庫,你的輸入數據,只有你能找到問題。
我寫了一篇文章,解釋了如何調試你的PDO問題。
要除錯特定的問題,你需要:
urlencode()
函數會有所幫助,它會顯示資料庫和輸入中的所有無法列印和轉換字元。 另一個常見問題是當你有多個資料庫並連接到錯誤的資料庫時,它沒有所要求的資料。這個問題類似於這個問題,所以只要按照相同的步驟進行檢查,只不過不是檢查表的清單而是資料行。
這是一個罕見的情況,但為了確保,按照這個很好的答案的清單進行檢查。