110

不久前,有人建议我更改我的代码以使用 PDO,以便参数化我的查询并将 HTML 安全地保存在数据库中。

好吧,这里是主要问题:

  1. 我查看了http://php.net/manual/en/ref.pdo-mysql.php,我真的不知道应该把那个$ ./configure --with-pdo-mysql字符串放在哪里......

  2. 我正在构建的站点实际上只需要一页的 PDO。虽然我可能会考虑重写它,但这需要一段时间,而且我需要页面尽快运行,所以我不能完全关闭 MySQL。如果我安装了 PDO,我还能使用mysql_*处理程序吗?

有问题的服务器正在运行 PHP 版本 5.4.6-1ubuntu1 和 Apache/2.2.22 (Ubuntu)。如果重要的话,我也在运行一个 phpMyAdmin 数据库。

4

6 回答 6

193

在 Ubuntu 上,您应该能够使用 apt 安装必要的 PDO 部件sudo apt-get install php5-mysql

同时使用 PDO 和 mysql_ 没有限制。但是,您需要创建两个到数据库的连接,一个使用 mysql_,一个使用 PDO。

于 2012-11-14T08:14:48.457 回答
25

这是一个很好的问题,但我认为您只是误解了您阅读的内容。

安装 PDO

只有./config --with-pdo-mysql您编译自己的 PHP 代码时,您才需要使用它。如果你用包管理器安装它,你只需要使用 Jany Hartikainen 给出的命令行:sudo apt-get install php5-mysqlsudo apt-get install pdo-mysql

与mysql_的兼容性

除了 mysql_ 确实不受欢迎之外,它们都是独立的。如果您使用 PDO mysql_ 不涉及,如果您使用 mysql_ 则不需要 PDO。

如果您关闭 PDO 而不更改代码中的任何行,则不会有问题。但是既然你开始用PDO连接和写查询,你就不得不保留它,放弃mysql_。

几年前,MySQL 团队发布了一个迁移到 MySQLi的脚本。我不知道它是否可以定制,但它是官方的。

于 2012-11-14T08:19:49.730 回答
19

基本上 Jani Hartikainen 的答案是正确的!我赞成他的回答。我的系统(基于 Ubuntu 15.04)缺少的是在我的 php.ini 中启用 PDO 扩展

extension=pdo.so
extension=pdo_mysql.so

重新启动网络服务器(例如,使用“sudo service apache2 restart”)-> 每次罚款 :-)

要查找当前活动的 php.ini 文件所在的位置,您可以使用 phpinfo() 或此处的其他提示:https ://www.ostraining.com/blog/coding/phpini-file/

于 2015-12-14T09:46:51.590 回答
17

首先通过运行命令安装必要的 PDO 部件

sudo apt-get install php*-mysql 

其中 * 是 php 的版本名称,例如5.6、7.0、7.1、7.2

安装后需要提这两条语句

extension=pdo.so
extension=pdo_mysql.so

在您的 .ini 文件中(如果已经存在,请取消注释)并通过命令重新启动服务器

sudo service apache2 restart
于 2017-12-10T10:29:50.233 回答
9
  1. PDO 代表 PHP 数据对象。
  2. PDO_MYSQL 是实现数据对象(数据库)和用户输入(用户接口下的一层称为“代码隐藏”)之间的接口的驱动程序,用于访问您的数据对象,MySQL 数据库。

使用它的目的是在用户界面和数据库之间实现额外的安全层。通过使用这一层,数据可以在插入数据结构之前进行规范化。(大写字母是大写字母,没有前导或尾随空格,所有日期格式正确。)

但是有一些你可能不知道的细微差别。

首先,到目前为止,您可能已经用类似于 URL 的方式编写了所有查询,并使用 URL 本身传递参数。使用 PDO,所有这些都在用户界面级别下完成。用户界面将球交给 PDO,PDO 将球传到场上并将其放入数据库中进行 7 点 TOUCHDOWN。他得到 7 分,因为他把球拿到了那里,并且比通过 URL 传递信息安全得多.

您还可以通过使用数据层来强化您的站点以进行SQL 注入。通过使用这个作为唯一与数据库本身对话的“玩家”的中间层,我相信您可以看到这会更加安全。接口到数据层到数据库,数据层到数据库到数据层到接口。

和:

通过在编写代码时实施最佳实践,您将对结果感到更加满意。

其他来源:

回复:url php dot net/manual/en/ref dot pdo-mysql dot php 中的 MySQL 函数

回复:三层架构 - 为您的应用程序添加安全性 https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

回复:使用 UML 的面向对象设计如果你真的想了解更多,这是市场上最好的书,Grady Booch 是 UML 之父 http://dl.acm.org/citation.cfm?id=291167&CFID =241218549&CFTOKEN=82813028

或者用bitmonkey检查。那里有一个小组,我相信你可以从中学到很多东西。

>

如果我们知道术语的真正含义,我们就不需要学习任何东西。

>

于 2013-08-27T13:22:49.250 回答
1

如果你需要一个带有 MySQL 的 CakePHP Docker 容器,我已经为此创建了一个 Docker 镜像!无需担心设置。它只是工作!

以下是我在基于 Ubuntu 的映像中的安装方式:

https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8

RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

构建和运行您的应用程序只是一个 2 步过程(考虑到您在应用程序的当前目录中):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
于 2015-10-20T15:33:57.517 回答