在MySQL Linux服务器上安装PDO驱动程序


102

不久前,有人建议我更改代码以使用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数据库。

Answers:


182

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

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


1
好的,我在php.ini文件中查找,默认情况下pdo处于启用状态,我仍然需要知道是否可以同时使用pdo和mysql_ * handlers ...
Yuri Scarbaci 2012年

1
@ YuriCollector'sEditionRossi更新了答案。
Jani Hartikainen

1
值得一提的是,之后需要重新启动apache才能应用更改。
亚当F

1
@jonaspas(如果您使用的是ubuntu),请尝试使用更新,sudo apt-get update然后从答案中运行原始安装。
ryAn_Hdot16年

14
谢谢ryAn_Hdot!但这对我也不起作用。现在我的解决方案:我正在运行php7,而我必须这样做sudo apt-get install php-mysql
johnnydoe82 '16

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。我不知道它是否可以定制,但这是官方的。


因此,如果我想同时使用两者,我将不得不同时使用两种连接方法?我的意思是:我已经运行了50个页面,其中包含很多代码,花了一年的时间开发,我不能只翻一页,现在无论如何都无法回头...我需要做的是那50个页面按原样运行,而我现在正在使用pdo编写的那一页甚至有可能吗?感谢您的
宝贵

如果必须更改很多代码,重构可能会很有用。但是,是的,如果要同时使用两者,则必须建立两个连接。
artragis 2012年

为什么重构我的代码很简单?我目前正在从事一项工作,但我还没有开始自己的工作,这是由另一个程序员完成的,但现在我不得不适应他的代码了。由于每个人都有自己的风格,这有点苛刻,因此,我宁愿将其保留为目前状态,因为使用该软件至今没有任何问题... thx btw ^^我是否需要在打开pdo一个之前关闭mysql连接,否则我可以同时打开它们同时?^^
Yuri Scarbaci 2012年

1
也许您可以使用
Netbeans

1
我找到了一个脚本,该脚本可让您迁移到mysqli,甚至可能迁移到PDO
artragis 2012年

17

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

extension=pdo.so
extension=pdo_mysql.so

重新启动Web服务器(例如,使用“ sudo service apache2 restart”)->一切正常:-)

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


为我工作。谢谢。+1
马塞尔

1
我的php.ini文件中没有这些行。我只有extension=pdo_mysql.dll,所以我对此没有评论,并重新启动了apache并成功了。
user3494047 '16

@ user3494047我想你在Windows系统上。我从Linux系统中获取了配置示例。但是很高兴您分享了您的经验!
Tobias Gaertner

实际上是ubuntu 14.04
user3494047

谢谢!我必须运行了十几个sudo apt-get install...命令,但没有任何效果,最后将这两行添加到了php.ini中。只提到保存后运行的apache server restart命令:sudo service apache2 restart。我的php.ini文件路径是/etc/php/7.0/apache2/php.ini(操作系统:Lubuntu 16.04,类似于用于这些目的的Ubuntu)。运行sudo gedit <fullpath>以对其进行编辑。(系统上的gedit或geany或任何文本编辑器)
Nikhil VJ

10

首先,通过运行以下命令安装必要的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

该答案没有添加任何新信息-因此它的imo没有帮助。
Tobias Gaertner

1
这个答案非常有帮助,因为它指出您需要中的PHP版本号php*-mysql。我一直在尝试php-mysqlphp7-mysql但无济于事,然后这个答案使交易达成了!谢谢!
jedmao

为我工作。谢谢。
MahirAltınkaya19年

@MahirAltınkayaGald,它有所帮助。
阿文

8
  1. PDO代表PHP数据对象。
  2. PDO_MYSQL是驱动程序,它将实现数据对象(数据库)和访问您的数据对象MySQL数据库的用户输入(用户界面下的一层,称为“代码背后”)之间的接口。

使用此功能的目的是在用户界面和数据库之间实现附加的安全层。通过使用此层,可以在将数据插入数据结构之前对其进行标准化。(大写字母是大写字母,没有前导或尾随空格,所有日期都格式正确。)

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

首先,到目前为止,您可能已经用类似于URL的形式编写了所有查询,然后使用URL本身传递了参数。使用PDO,所有这些操作都在用户界面级别完成。用户界面将球传给PDO,PDO将其传到低位,然后将其植入数据库以进行7点TOUCHDOWN ..他获得7分,因为他到达了那里,并且比通过URL传递信息更安全。 。

您还可以使用数据层将站点加固为SQL注入。通过使用这个中间层,它是与数据库本身进行对话的唯一“玩家”,我相信您可以看到这样做的安全性。数据层到数据库的接口,数据层到数据库到数据层的接口。

和:

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

其他来源:

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

回复:三层架构-为您的应用程序增加安全性 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检查。我相信那里会有一个小组,您可以从中学到很多东西。

>

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

>


0

如果您需要一个带有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

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

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp

如果有人尝试使用已经运行的docker容器执行此操作: sudo /etc/init.d/apache2 restart需要重新启动apache服务器
MajorBreakfast
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.