- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我被告知我最好使用 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_doSomething()”函数替换为对应的“pg_doSomthing()”函数(始终检查参数处理中的潜在差异)。许多其他受支持的数据库引擎也是如此。mysql:
更改为 pgsql:
/
因此回到您的问题,PDO 基本上只是为您提供了一种不同的方式来实现相同的事情,同时提供了一些快捷方式/改进/优势。例如,转义将以您正在使用的数据库引擎所需的正确方式自动发生。参数替换(防止 SQL 注入(inject),示例中未显示)也更容易,从而不易出错。
您应该继续阅读 some OOP basics了解其他优势。
关于php - 为什么 PDO 比 mysql_real_escape_string 更适合转义 MySQL 查询/查询字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1742066/
我正在制作一个简单的程序来更改我的计算机背景。我在网上发现了一个stackoverflow问题,或多或少涵盖了我想做的事情。我现在可以成功地将我的墙纸更改为平铺、居中和从在线图像 URL 拉伸(str
是的,这是另一个每组最大的问题之一!我已经尝试了几天,试图解决这个问题,但无济于事。我也一直在寻找,但我什至不知道我是否在正确的地方寻找。问题的最简化版本如下。 我有 2 个表,一个是多对多表,另一个
我想解析一些数据,我有一个 BNF 语法来解析它。谁能推荐任何能够生成可在移动设备上使用的代码的语法编译器? 由于这是针对 JavaME 的,因此生成的代码必须是: 希望很小 对外来 Java 库的依
我有一个动物园时间序列对象,vels : 2011-05-01 00:00:00 7.52 2011-05-01 00:10:00 7.69 2011-05-01 00:20:00 7.67 2011
我想创建一个供小型制造公司使用的生产管理系统。该系统将允许记录设备制造的不同阶段。要求如下: 1.非基于浏览器的界面。需要基于 Swing 或 AWT 的东西。虽然我了解实现基于浏览器的解决方案的便利
是否有任何 java 或 clojure 邮件库可以实现 lamson 的功能?特别是lamson的邮件路由功能非常酷http://verpa.wordpress.com/2010/11/13/mak
sklearn 中的 fit() 方法似乎在同一界面中服务于不同的目的。 应用于训练集时,像这样: model.fit(X_train, y_train) fit() 用于学习稍后将在测试集上使用 p
我使用 OSM 显示县的边界。它在大多数情况下工作得很好,但在某些情况下,县更大并且不适合 map 。 如何在开始渲染之前调整缩放级别? var map = L.map("mapCnty").setV
我正在致力于缩小和丑化我的 javascript 文件。我想知道合适的尺寸是多大。如果我将所有js文件合并成一个文件(经过缩小和丑化),它会大于1mb。我想,最好将它们分成 2-3 个文件(每个文件
我是 Java 新手。 我想在 GridPane 中放置一个 TextArea。我在过去几个小时内尝试了此操作,结果如下: 如您所见,TextArea 比我的 Gridpane 大得多。这是我的代码:
sklearn 中的 fit() 方法似乎在同一界面中服务于不同的目的。 应用于训练集时,像这样: model.fit(X_train, y_train) fit() 用于学习稍后将在测试集上使用 p
我认为这是一个基本问题,但也许我混淆了这些概念。 假设我使用 R forecast 包中的函数 auto.arima() 将 ARIMA 模型拟合到时间序列。该模型假设方差不变。我如何获得该方差?是残
我使用 OSM 显示县的边界。它在大多数情况下工作得很好,但在某些情况下,县更大并且不适合 map 。 如何在开始渲染之前调整缩放级别? var map = L.map("mapCnty").setV
我有一个很长的标签,这是我的第一个标签,我想把它放在我的单元格中。这就是我所拥有的,但它不起作用。 我有一个自定义的 UITabelviewCell ,里面有几个标签。 -(CGFloat)table
假设我有一个包含 WCS header 的 FITS 文件,这样我就可以执行以下操作: #import healpy as hp #import astropy.io.fits as pyfits #
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭10 年前。 Improve
我们正在构建一个与其他系统有多个集成接触点的应用程序。我们有效地使用 Unity 来满足我们所有的依赖注入(inject)需求。整个业务层是用接口(interface)驱动的方法构建的,实际实现在应用
我得到了 MKMapView 和一些注释。我使用下一个代码来显示所有注释: NSArray *coordinates = [self.mapView valueForKeyPath:@"annotat
我在一家托管公司工作,我们经常收到安装、新域、滞后修复等方面的请求。为了大致了解仍然开放的内容,我决定制作一个非常简单的票务系统。我有一点 php 知识和一点 MySQL 知识。目前,我们将根据客户的
我想向我的 UITableView 添加背景图像,它适合 UI,还具有导航 Controller 和工具栏。在那种情况下,我没有找到适合 iPhone 和 iPad 不同屏幕的 tableview 的
我是一名优秀的程序员,十分优秀!