2012-04-07 8 views
0

ここではコードです:mysql_real_escape_string()を追加するにはどうすればいいですか?

//check if the starting row variable was passed in the URL or not 
    if (!isset($_GET['pg']) or !is_numeric($_GET['pg'])) { 
//we give the value of the starting row to 0 because nothing was found in URL 
    $startrow = 0; 
//otherwise we take the value from the URL 
} else { 
$startrow = (int)mysql_real_escape_string($_GET['pg']); 
} 

私は)(mysql_real_escape_stringのを追加しようとするたびに、 !issetの$ _GET ['pg']には、コードは実行されず、エラーメッセージも表示されません。

+0

mysql ...の先頭にある '(int)'を削除してみてください... –

+0

mysql_real_escape_string(文字列)の結果を 'int'にキャストしているのはなぜですか? –

+0

質問を回すには、なぜここで 'mysql_real_escape_string'を使用していますか? –

答えて

2

intにpg値をキャストしないでください。代わりに、整数値が含まれていることを確認するか、クエリを実行しないでください。表示されないクエリを実行する予定がない場合、mysql_real_escape_string()は接続が必要なため、間違ったツールです。

適切なことは、$_GET['pg']の内容が整数であり、エスケープしないことを検証することです。

is_numeric()は、整数でない実数に対してTRUEを返すので、私はctype_digit()を使用して正の整数を検証する傾向があります。あなたにも負の整数の可能性を必要とする場合は、ctype_digit(abs($_GET['pg']))

if (!isset($_GET['pg']) or !ctype_digit($_GET['pg'])) { 
    // it wasn't an integer 
    // initialize to your default value 
} 
else { 
    // $_GET['pg'] *has to be a valid int* or we wouldn't have entered the else block 
    // no need to escape or further process it - it's safe to use 
} 
+0

もし私がctype_digitを使うのであれば、数字だけを許可しますか?たとえば、誰かが "ドロップテーブル"や$ get値の何かへのリンクを入力した場合、クエリは中断しますか? – AAA

+0

@AAA誰かが正の整数ではないものを入力した場合、コードは上記の 'if'の場合を入力し、デフォルト値を初期化するか、別のページにリダイレクトするかを問わず、なんでも。 –

+0

@AAA考えられるのは、値が整数であることを検証することです。そうでない場合は、クエリに進まないでください。 –

0

mysql_real_escape_stringのを使用できるデータベース(第2パラメータ)に接続する必要があり、それが提供されていない場合は、最後の接続が使用されます開く - 参照:

http://php.net/manual/en/function.mysql-real-escape-string.php

データベースの接続が作成されていない可能性がありますか?その場合、警告が表示されるはずです(PHPの設定で警告が表示されるかどうかを確認してください)

+0

接続がアクティブであり、動作しています。私はそれをテストすることができました。ありがとう – AAA

1

0以上の整数値を使用する必要があります。入力が無効である場合には0である:

$startrow = max(0, isset($_GET['pg']) ? $_GET['pg'] : 0); 

mysql_real_escape_string()を整数値には必要ありません。あなたのコーディングスタイルにもよりますが、PHPでも可能です:

$startrow = max(0, @$_GET['pg']); 

もしあなたがPHP 5.4を使っているのであれば、それはかなりうまくいきます。

関連する問題