0

私はこのコードを持っています:

$query = "select id from votes where username = '$user' and article_id  = $this->id";

私はそれをサニタイズするためにこのコードを試しました:

$query = sprintf("select id from votes where username = '$user' and article_id = $this->id", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));

しかし、mysql_real_escape行で次のエラーが発生します。

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 145 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'mexautos'@'localhost' (using password: NO) in /home/mexautos/public_html/kiubbo/data/article.php on line 146 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/mexautos/public_html/kiubbo/data/article.php on line 146

ここでユーザー名を取得しますが、十分に安全かどうかはわかりません。

function getUsername(){ return $this->username; }

どうも

4

7 に答える 7

8

mysql_real_escape_stringを使用する前に、mysql接続が必要です。

于 2009-06-05T17:06:47.703 に答える
7

代わりに、このために準備されたステートメントを使用することをお勧めしますsprintf

于 2009-06-05T17:09:21.833 に答える
3

これが問題の原因であるかどうかはわかりませんが、sprintfステートメントの変数は「$user」および「$this-> id」ではなく、「%s」である必要があります。

http://us2.php.net/sprintf

于 2009-06-05T17:07:11.633 に答える
3

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:ユーザー'mexautos' @'localhost'のアクセスが拒否されました(パスワードを使用:NO)

警告:mysql_real_escape_string()[function.mysql-real-escape-string]:サーバーへのリンクを確立できませんでした

リンクを確認しましたか?アクティブですか?mysql_real_escape_string()を使用するには、事前に接続する必要があり ます。パスワードを設定することを忘れないでください。

試す:

mysql -u mexautos -p

(パスワードがない場合はEnterキーを押します)

また、sprintf()関数を確認してください。変数をバインドするには、%sを使用する必要があります。

$a = 'Foo';
$b = 'Bar';
$foo = sprintf('Foo Bar %s %s', $a, $b);
于 2009-06-05T17:10:57.137 に答える
2

mysql_real_escape_string()はサーバーのエンコーディングタイプを使用してサニタイズを支援するため、接続が必要です。

また、sprintf()は次のようになります。

$query = sprintf("SELECT id FROM votes WHERE username = '%s' and article_id = %d", 
    mysql_real_escape_string($user), 
    mysql_real_escape_string($password));
于 2009-06-05T17:08:25.843 に答える
1

Zend_Dbのような成熟したDB抽象化レイヤーを使用することをお勧めします(そこにはたくさんあります)。独自の自作ソリューションを実装することは、本番システムに推奨するものではありません。

于 2009-06-05T17:08:01.290 に答える
0

他の人が言ったように、「$ user」ではなく「%s」であり、開いた接続が必要です。

@Tomalaksprintfはより高速です-それがそれを使用する理由です-それはネイティブC関数です。

于 2009-06-05T17:15:08.143 に答える