9

pdo で文字列をエスケープする方法を知りたいです。私は次のコードのようにスプリングをエスケープしてきましたが、今では pdo を使用していますが、それを行う方法がわかりません

$username=(isset($_POST['username']))? trim($_POST['username']): '';
$previlage =(isset($_GET['previlage']));
$query ="SELECT * FROM site_user 
WHERE username = '".mysql_real_escape_string($_SESSION['username'])."' AND  previlage ='Admin'";
$security = mysql_query($query)or die (mysql_error($con));
$count = mysql_num_rows($security);
4

2 に答える 2

23

ええと、あなたはPDO :: quoteを使うことができます、しかし、それ自身のドキュメントページで述べられているように...

この関数を使用してSQLステートメントを作成する場合は、 PDO :: quote()を使用してユーザー入力をSQLステートメントに補間するのではなく、 PDO :: prepare()を使用してバインドされたパラメーターを持つSQLステートメントを準備することを強くお勧めします。

あなたの場合、それは次のようになります:

$query = "SELECT * 
            FROM site_user 
           WHERE username = :username AND previlage = 'Admin'";
$sth   = $dbh->prepare($query);
$sth->execute(array(':username' => $_SESSION['username']) );
于 2013-02-26T14:35:53.310 に答える
3

mysql_*関数は PDO では動作しません。なぜ?PDO はデータベースへの接続に mysql を使用しないため、入力サニタイズに関しては、PDO は準備済みステートメントを使用します。そのための優れたチュートリアルをここで見つけることができます: pdo

于 2013-02-26T14:37:19.517 に答える