如何在 pdo 中转义字符串? [复制]

Posted

技术标签:

【中文标题】如何在 pdo 中转义字符串? [复制]【英文标题】:How to escape strings in pdo? [duplicate] 【发布时间】:2013-02-12 01:24:11 【问题描述】:

我想知道如何在 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);

【问题讨论】:

你为什么使用mysql_real_escape_string作为会话值? 不要使用贬低的 mysql_* 函数。改用 PDO/MySQLi。 @Mr.Alien — 大概是因为会话包含文本而不是预先转义的 SQL 片段。在将文本插入数据格式或将被评估为代码的字符串之前,您应该始终对其进行转义。 @Boynux — 问题是问如何做到这一点! @Quentin 我猜他一定是在使用正则表达式来删除非用户名字符,如$#@%^! 等,并且确信他从数据库中获取数据并将其分配给用户名会话 【参考方案1】:

嗯,你可以使用PDO::quote,但是,正如它自己的文档中所说...

如果你使用这个函数来构建 SQL 语句,你就是 强烈推荐使用PDO::prepare()准备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']) );

【讨论】:

你提供了我所问的非常感谢【参考方案2】:

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

【讨论】:

好人,我明白了,谢谢

以上是关于如何在 pdo 中转义字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中转义无效的 XML 字符

如何在字符串变量中转义引号? [复制]

如何在 URL 中转义哈希字符

PL/SQL,如何在字符串中转义单引号?

PL/SQL,如何在字符串中转义单引号?

需要在正则表达式中转义的所有特殊字符的列表