gpt4 book ai didi

php - 为什么 PDO 比 mysql_real_escape_string 更适合转义 MySQL 查询/查询字符串?

转载 作者:IT王子 更新时间:2023-10-29 00:42:59 26 4
gpt4 key购买 nike

我被告知我最好使用 PDO 进行 MySQL 转义,而不是 mysql_real_escape_string

也许我今天脑残了(或者这可能是因为我根本不是一个天生的程序员,而且在 PHP 方面我仍然处于新手阶段) , 但已经查看了 PHP 手册并阅读了 the entry on PDO ,我仍然不清楚 PDO 实际上是什么以及为什么它比使用 mysql_real_escape_string 更好。这可能是因为我还没有真正掌握 OOP 的复杂性(我假设它与 OOP 有关),但除了变量和数组值前面似乎有一个冒号这一事实之外,我仍然不确定它到底是什么以及如何使用它(以及为什么它比 mysql_real_escape_string 更好。(这也可能与我没有真正明确的事实有关)了解什么是“类”,所以当我阅读“PDO 类”时,我真的一点也不聪明)。

已阅读an article在 MySQL 网站的“开发者专区”上有两个,我还是不太清楚。由于我目前甚至无法弄清楚它是什么,我认为现在使用它可能有点超出我的范围,但我仍然有兴趣扩大我的教育并找出我可以改进的东西。

谁能用“通俗易懂的英语”向我解释什么是 PDO(或者用通俗易懂的英语向我指出有关该主题的方向),以及您将如何使用它?

最佳答案

由于当前的答案很详细,而您的问题更针对一般概述,我会试一试:

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

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

例如,如果没有 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 数据库对话,您只需在实例化调用 new PDO()< 中将 mysql: 更改为 pgsql:/。使用旧方法,您必须检查所有代码,将所有“mysql_doSomething()”函数替换为对应的“pg_doSomthing()”函数(始终检查参数处理中的潜在差异)。许多其他受支持的数据库引擎也是如此。

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

您应该继续阅读 some OOP basics了解其他优势。

关于php - 为什么 PDO 比 mysql_real_escape_string 更适合转义 MySQL 查询/查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com