如何在 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 中转义字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章