2011-07-06 6 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は、MySQLだけ正確に一つの行を返した場合にのみチェックされますhttp://en.wikipedia.org/wiki/Thailand

+1

は$ 'url'をエコーあれば、あなたのクエリを発射し、それがどのように見えることを確認する直前"SELECT url FROM sites WHERE url ='". $url."' LIMIT 1" はこれを無視してくださいすべきではありませんあなたのデータベースのデータ? –

+1

1.データベースに対して**同じ**クエリを実行しましたか? 2. 'mysql_num_rows($ exists)'は何を返しますか? 3.あなたのコードによって生成された**正確な**クエリを表示します。 – zerkms

+0

thatsも...私はphpmyadminでこのSQLクエリを使用しようとしました...それでも空のセットが返される – re1man

答えて

1

は、ここでは、最初のステップとして何をすべきかです。クエリを使用してWHERE url = '$url'を完全に削除し、mysql_num_rows($exists)を印刷してください。それは2有力な問題の一つだ場合伝えるのに十分であるべき

:返されていない行が生じ

  • 悪いURL。あなたが予想よりも他を含むデータベースによって引き起こされるか
  • 悪い行。これまでのご意見をもとに

、前者が最も可能性が高いです。それはあなたがせずにバックwhere句を行を取得判明した場合、あなたはあなたのURLが間違っている理由を把握する必要があります。これは、大文字と小文字の区別の問題またはパディング(サイズ)の問題などがあります。

あなたはコメントで言及として、like作品は=が、その後、私たちはあなたのデータを見る必要はありません、場合

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

を、出力が何であるかを私たちに正確を示しています。

は(DBレベルで)を実行します。すぐmysql_queryを実行する前に

print_r($url) 

:同様に、URLの出力は次のようにコードで使用されています。

これらの両方のコマンドの出力を質問に追加してください。

+0

これはどこがなくなった場合に動作します...上記のように.....私はvarchar(1000)を使用します...私はvarcharを使うべきですか? – re1man

+0

見つけたのは...好きなところのURL ... – re1man

+0

しかしその種の一時的な修正.... – re1man

-1

です。

if (mysql_num_rows($exists) > 0) 

あなたが確認しているデータがあるとします。渡すURLが同一であることが絶対に間違っている場合は、LIKEとワイルドカードを使用して検索を拡大することをお勧めします。

+1

まあ、彼は" LIMIT 1 "と言っています。 – EboMike

+4

'LIMIT 1'句は、私が考えると思うはずです。 –

+0

データベースには1行しかありません...私は – re1man

0

私はPHPプログラミングの経験を持っていないが、それは、引用符の内側$url作品(" "

+0

クエリのOPの構文が有効であり、構文も有効であり、しかし、もっと面倒です。 – Johan