2011-11-15 17 views
1

テーブルに「IP」という名前のデータベースがあります。今すぐバックPHPでid 1, ip 127.0.0.1IPアドレスがデータベースに格納されているかどうか確認してください

私は、次のしている:それは2列Id(int11)ip(varchar15)、および値を持つ行があり

$ip = $_SERVER['REMOTE_ADDR']; 
$query = "SELECT * FROM ip WHERE ip='$ip'"; 

if(mysql_query($query)) { 
    echo "Ip is already in database"; 
} 
else { 
    echo "Ip is not in database"; 
} 

今、私が手の問題は、if文はまだ場合はTRUEになりますということですIPを変更して:125.0.0.1

私はこれを2時間修正しようとしていますが、私が間違っていることはまだ分かりません。

+0

これを除いて、これは整数としてIPアドレスを保存することによって、はるかに効率的にすることができます。アドレスと整数を変換するには、MySQL関数[INET_ATON](http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton)とINET_NTOAを使用し、UNSIGNED ipのINTカラム。利点は、行サイズが固定されているため、インデックス作成が高速になり、検索が高速になります。 –

+0

いいね、素早く好きです!私はそれを今のようにしようとします。 – Seltjoek

答えて

5

mysql_query()結果がなくても、クエリが正常に実行された場合はfalseを返しません。代わりにmysql_num_rows()を使用してみてください:私はREMOTE_ADDR VAR周りmysql_real_escape_stringを追加ところで

$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']); 
$query = "SELECT * FROM ip WHERE ip='$ip'"; 
$result = mysql_query($query); 

if (mysql_num_rows($result) > 0) { 
    echo "Ip is already in database"; 
} 
else { 
    echo "Ip is not in database"; 
} 

は、あなたが常にレコードの数を確認するために、あなたの入力:)

+0

それは魅力のように動作する速い応答ありがとう! mysql_real_escape_stringについて誰かがそれを操作することはできますか? – Seltjoek

+0

私は本当に正直であるとは確信していませんが、私の本能は、おそらく誰かがその変数に悪意のある価値を注入する可能性があると言いますが、私は確信していません。明示的にvarを自分で設定していないと、私は常に慎重の面で間違っています。 – Clive

+0

これは良いことです。 Tnx :) – Seltjoek

4

使用はmysql_num_rowsをサニタイズすべきです!

$query = mysql_query("SELECT * FROM ip WHERE ip='". $_SERVER['REMOTE_ADDR'] ."'"); 
$num = mysql_num_rows($query); 

if($num > 0) { 
    echo "Exists"; 
} 
else { 
    echo "Does not exist"; 
} 
+0

お返事ありがとうございました! – Seltjoek

関連する問題