【问题标题】:How to escape strings in pdo? [duplicate]如何在 pdo 中转义字符串? [复制]
【发布时间】: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 我猜他一定是在使用正则表达式来删除非用户名字符,如$#@%^! 等,并且确信他从数据库中获取数据并将其分配给用户名会话

标签: php mysql pdo


【解决方案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

【讨论】:

  • 好人,我明白了,谢谢
猜你喜欢
  • 2014-03-07
  • 2017-04-02
  • 2011-04-12
  • 2012-08-02
  • 2015-11-19
  • 2014-03-18
  • 2012-03-29
  • 2011-04-17
  • 2017-07-20
相关资源
最近更新 更多