函数mysql_real_escape_string的PDO等效项是什么?

函数mysql_real_escape_string的PDO等效项是什么?,第1张

函数mysql_real_escape_string的PDO等效项是什么?

好吧,没有!

从技术上讲,

PDO::quote()

它是存在的,但很少使用,并且不等同于
mysql_real_escape_string()


那就对了! 如果您已经按照准备好的语句记录的方式正确地使用了PDO ,那么它将保护您免受MySQL注入


Example:

以下是使用准备好的语句(pdo)进行 安全 数据库查询 的示例

  try {     // first connect to database with the PDO object.      $db = new PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [       PDO::ATTR_EMULATE_PREPARES => false,        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION     ]);  } catch(PDOException $e){     // if connection fails, show PDO error.    echo "Error connecting to mysql: " . $e->getMessage(); }

并且,现在假设已建立连接,您可以像这样执行查询。

if($_POST && isset($_POST['color'])){    // preparing a statement    $stmt = $db->prepare("SELECt id, name, color FROM Cars WHERe color = ?");    // execute/run the statement.     $stmt->execute(array($_POST['color']));    // fetch the result.     $cars = $stmt->fetchAll(PDO::FETCH_ASSOC);     var_dump($cars);  }

现在,您可能已经知道,我还没有使用任何东西来转义/消毒的值

$_POST["color"]
。借助PDO和预准备语句的强大功能,此代码可安全地防止myql注入。


值得注意的是,出于安全原因,应该

charset=utf8
在您
DSN
上面看到的那样传递as属性,并始终使PDO能够以异常形式显示错误

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION

因此,来自数据库查询的错误将不会显示敏感数据,例如目录结构,数据库用户名等。

最后但并非最不重要的,还有时候,你不应该相信PDO
100%,并且将必然会采取一些额外措施,以防止SQL注入,是,如果你使用的是MySQL的一个过时版本的那些情形之一

[ mysql =< 5.3.6]
的描述

但是,使用上述所示的预处理语句总是比使用以开头的任何功能更安全。

mysql_



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5621568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存