有人告诉我,最好使用PDOMySQL转义,而不是mysql_real_escape_string。
PDO
mysql_real_escape_string
也许我真是个脑筋急转弯的一天(或者可能是我天生没有想象力的天才程序员,而我在PHP方面仍然处于新手阶段),但是查阅了PHP手册并阅读了PDO上的条目,我仍然不清楚PDO到底是什么以及为什么它比使用PDO更好mysql_real_escape_string。这可能是因为我还没有真正掌握OOP的复杂性(我认为这与OOP有关),但是除了变量和数组值似乎在它们前面有一个冒号之外,我仍然不确定它到底是什么以及如何使用(以及为什么它比mysql_real_escape_string。(这也可能与我对“类”不是很清楚的事实有关,因此当我阅读“ PDO类”时,我并不是真正的明智者)。
在MySQL网站的“开发人员专区”上读过一两篇[文章后,我仍然不清楚。由于我现在甚至无法弄清楚它是什么,所以我认为现在使用它可能超出了我一点,但是我仍然对扩大我的教育范围以及寻找如何改善自己的事物感兴趣。
谁能用“普通英语”向我解释什么是PDO(或让我了解用普通英语写的主题的方向),以及您将如何使用它?
当您的问题更着眼于一般概述时,当当前答案更加详细时,我将尝试一下:
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()
mysql:
pgsql:``newPDO()
因此,回到您的问题上,PDO基本上只是为您提供了实现相同目标的不同方法,同时提供了一些快捷方式/改进/优势。例如,转义将以您正在使用的数据库引擎所需的正确方式自动发生。同样,参数替换(防止SQL注入,未在示例中显示)更加容易,从而减少了出错的可能性。
您应该阅读一些OOP基础知识,以了解其他优点。