2011-07-06 80 views
2

非常令人沮喪,但MySQL是該代碼返回一個空集(未呼應存在):的MySQL返回空集

if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("repository", $con); 

$url = stripslashes($url); 
$url = mysql_real_escape_string($url, $con); 
$exists = mysql_query("SELECT url FROM sites WHERE url = '$url' LIMIT 1"); 
if (mysql_num_rows($exists) == 1) { 
    echo "exists"; 
} 

不應該這樣做,因爲我測試過良好的金額。

該表由一列「url」組成,它是數據類型varchar(1000)(最大值)。存儲用於測試目的的url是http://en.wikipedia.org/wiki/Thailand

+1

回聲'$ url'數據庫中的數據? –

+1

1.您是否對數據庫執行了**相同的**查詢? 2.什麼'mysql_num_rows($ exists)'返回? 3.向我們展示由您的代碼生成的**精確**查詢。 – zerkms

+0

多數民衆贊成也是...我試圖在phpmyadmin中使用這個SQL查詢...並且它仍然返回空集 – re1man

回答

1

以下是您做的第一步。在使用之前,請從您的查詢中刪除WHERE url = '$url'並打印出mysql_num_rows($exists)

這應該足以告訴我們,如果這是兩個有可能的問題之一:

  • 不良URL導致沒有返回行;或
  • 由於數據庫包含的內容不正確而導致的行所期望的。

根據您的意見,前者是最有可能的。如果事實證明你得到一排沒有where子句,你必須找出你的網址不正確的原因。這可能是一個區分大小寫問題或填充(大小)問題等等。


如果,你在評論提到,like作品,其中=沒有,那麼我們需要看到您的數據。

(在DB級)執行:

select concat('[',url,']') from sites 

,並告訴我們究竟輸出是什麼。同樣,輸出代碼使用的URL類似於:

print_r($url) 

緊接在執行mysql_query之前。

請將這兩個命令的輸出附加到您的問題中。

+0

這結束了工作,如果哪裏不見了......正如我上面提到.....我使用varchar(1000)....應該只是使用varchar? – re1man

+0

找到它...在哪裏URL LIKE工作... – re1man

+0

,但它的一種臨時修復... – re1man

-1

這樣只會檢查MySQL是否只返回一行。檢查

if (mysql_num_rows($exists) > 0) 

假設有這樣的數據,你正在檢查,當然。如果您不確定您傳遞的網址是否相同,您可能想要使用LIKE和通配符擴大搜索範圍。

+1

嗯,他確實說了「LIMIT 1」。 – EboMike

+4

'LIMIT 1'條款應該已經照顧到了,我會認爲... –

+0

我知道數據庫中只有一行,但是我檢查了 – re1man

0

我沒有在PHP編程經驗,但它不應該是"SELECT url FROM sites WHERE url ='". $url."' LIMIT 1" 您炒掉查詢並確認它看起來像之前請忽略這一點,如果$url作品引號內(" "

+0

該查詢的OP語法是有效的,您的語法也是有效的,但更麻煩。 – Johan