0

mysql_real_escape_string に問題があります。ezSQL を使用して MySQL に接続します。

問題:

mysql_real_escape_string($username) と mysql_real_escape_string($password) が空になります。

コード:

$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".mysql_real_escape_string($username)."' AND password='".mysql_real_escape_string($password)."'");

回避策:

$row の前または内部に mysql_real_escape_string を置くと、値が空になります。$row の後に mysql_real_escape_string を配置すると、機能します。したがって; 既存の $row の前に別の $db を配置します。

$row2 = $db->get_row("SELECT firstname, secondname, id FROM users");
$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".mysql_real_escape_string($username)."' AND password='".mysql_real_escape_string($password)."'");

質問:

どうすればこれを適切に修正できますか?

4

2 に答える 2

0

最適な方法は、mysqli または pdo を使用することです。mysql 関数は非推奨であり、将来削除される予定です。

http://php.net/manual/en/mysqli.prepare.phpには、ケースに適応できる良い例が含まれています。最初に mysql と同じ方法で接続を設定し、次にクエリを準備し、自動的にエスケープされるパラメーターをバインドしてからフェッチできます。

于 2014-08-27T01:11:41.950 に答える
0

ezsql には、使用すべき独自のエスケープ メソッドがあります – Dagon

ありがとう、これで私の質問は解決しました!コードを次のように更新しました。

$password = $db->escape($_POST['password']);
$username = $db->escape($_POST['username']);
$row = $db->get_row("SELECT firstname, secondname, id FROM users WHERE login='".$username."' AND password='".$password."'");

後で MySQLi へのアップグレードに向けて作業します。私は、ezSQL が MySQLi コンポーネントも提供していることを知っています。Destructionさん、medaさん、Christophe Ferreboeufさん、ご提案ありがとうございます。

于 2014-08-27T01:27:11.667 に答える