栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么PDO比mysql_real_escape_string更好地转义MySQL查询/查询字符串?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么PDO比mysql_real_escape_string更好地转义MySQL查询/查询字符串?

当您的问题更着眼于一般概述时,当当前答案更加详细时,我将尝试一下:

PDO类旨在封装与数据库交互所需的所有功能。他们通过定义“方法”(函数的OO客厅)和“属性”(变量的OO客厅)来做到这一点。您可以将它们用作您现在用于与数据库对话的所有“标准”功能的
完全替代

因此,与其调用一系列的“ mysql_doSomething()”函数,而不是将其结果存储在自己的变量中,而是“实例化” PDO类中的一个对象(“
class” =抽象定义,“ object” =具体的可用实例)类)并在该对象上调用方法以执行相同操作。

例如,如果没有PDO,您将执行以下操作:

// Get a db connection$connection = mysql_connect('someHost/someDB', 'userName', 'password');// Prepare a query$query = "SELECt * FROM sometable WHERe something = " . mysql_real_escape_string($comparison) . "'";// Issue a query$db_result = mysql_query($query);// Fetch the results$results = array();while ($row = mysql_fetch_array($db_result)) {  $results[] = $row;}

而这与使用PDO等效:

// Instantiate new PDO object (will create connection on the fly)$db = new PDO('mysql:dbname=someDB;host=someHost');// Prepare a query (will escape on the fly)$statement = $db->prepare('SELECt * FROM sometable WHERe something = :comparison');// $statement is now a PDOStatement object, with its own methods to use it, e.g.// execute the query, passing in the parameters to replace$statement->execute(array(':comparison' => $comparison));// fetch results as array$results = $statement->fetchAll();

因此,乍一看,除了语法上没有什么区别。但是PDO版本具有一些优点,最大的优点是数据库独立性:

如果您需要与PostgreSQL数据库通信,则只需在实例化调用中更改

mysql:
为。使用旧方法时,您将必须遍历所有代码,用其对应的“pg_doSomthing()”函数替换所有“mysql_doSomething()”函数(始终检查参数处理中的潜在差异)。对于许多其他受支持的数据库引擎,情况也是如此。
pgsql:``newPDO()

因此,回到您的问题上,PDO基本上只是为您提供了实现相同目标的不同方法,同时提供了一些快捷方式/改进/优势。例如,转义将以您正在使用的数据库引擎所需的正确方式自动发生。同样,参数替换(防止SQL注入,未在示例中显示)更加容易,从而减少了出错的可能性。

您应该阅读一些OOP基础知识,以了解其他优点。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416988.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号