Php 如何在pdo中转义字符串?

Php 如何在pdo中转义字符串?,php,mysql,pdo,Php,Mysql,Pdo,我想知道如何在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

我想知道如何在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);
好吧,你可以使用,但是,正如在它自己的文档页上所说的

如果您使用此函数构建SQL语句,则 强烈建议用于准备SQL语句 使用绑定参数,而不是使用PDO::quote()进行插值 用户输入到SQL语句中

在您的情况下,它可以如下所示:

$query = "SELECT * 
            FROM site_user 
           WHERE username = :username AND previlage = 'Admin'";
$sth   = $dbh->prepare($query);
$sth->execute(array(':username' => $_SESSION['username']) );

mysql.*
函数在PDO中不起作用。为什么?由于PDO不使用mysql连接到数据库,就输入清理而言,PDO使用准备好的语句。您可以在这里找到一个很好的教程:

为什么要使用
mysql\u real\u escape\u string
来连接会话值?不要使用去擦洗的mysql\u*函数。请改用PDO/MySQLi.@Mr.Alien-可能是因为会话包含文本,而不是SQL的预转义片段。在将文本插入数据格式或将作为代码计算的字符串之前,您应该始终对其进行转义。@Boynux-问题是如何做到这一点@昆汀:我猜他一定是在用正则表达式删除非用户名字符,比如
$#@%^等等,我确信他从数据库中获取数据并将其分配给用户名SessionCreat u,只要我问了什么谢谢一位我理解的伟人谢谢