【问题标题】:Installing PDO driver on MySQL Linux server在 MySQL Linux 服务器上安装 PDO 驱动程序
【发布时间】:2012-11-02 17:26:59
【问题描述】:

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

【问题讨论】:

    标签: php mysql pdo phpmyadmin installation


    【解决方案1】:

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

    【讨论】:

    • 这个答案非常有帮助,因为它指出您需要php*-mysql 中的 PHP 版本号。我尝试php-mysqlphp7-mysql 无济于事,然后这个答案敲定了交易!谢谢!
    【解决方案2】:

    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/

    【讨论】:

    • 我的 php.ini 文件中没有这些行。我只有extension=pdo_mysql.dll,所以我取消了它的注释并重新启动了apache并且它工作了。
    • @user3494047 我猜你是在 Windows 系统上。我从 linux 系统中获取了配置示例。但是很高兴您分享了您的经验!
    • 其实它是一个 ubuntu 14.04
    • 谢谢!我一定已经运行了十几个sudo apt-get install... 命令并且没有任何效果,最后将这两行添加到 php.ini 中就可以了。只是提到保存后运行的 apache 服务器重启命令:sudo service apache2 restart。我的 php.ini 文件路径是 /etc/php/7.0/apache2/php.ini(操作系统:Lubuntu 16.04,类似于 Ubuntu 用于这些目的)。运行sudo gedit <fullpath> 进行编辑。 (gedit 或 geany 或您系统上的任何文本编辑器)
    • 感谢您提供详细信息。实际上,您的 php.ini 所在的位置可能非常不同。您甚至可以按项目覆盖它。我更新了我的答案。
    【解决方案3】:
    1. PDO 代表 PHP 数据对象。
    2. PDO_MYSQL 是实现数据对象(数据库)和访问数据对象 MySQL 数据库的用户输入(用户界面下的一层称为“代码隐藏”)之间的接口的驱动程序。

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

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

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

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

    还有:

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

    其他来源:

    Re: MySQL Functions in the url php dot net/manual/en/ref dot pdo-mysql dot php

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

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

    或与 bitmonkey 核对。那里有一个小组,我相信你可以从中学到很多东西。

    >

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

    >

    【讨论】:

      【解决方案4】:

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

      安装 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 团队向migrate to MySQLi 发布了一个脚本。不知道能不能定制,反正是官方的。

      【讨论】:

      • 所以如果我想同时使用这两种连接方法,我必须同时使用这两种连接方法吗?我的意思是:我已经运行了 50 页,有很多代码,花了一年的时间开发,我不能只为 1 页而回头,反正现在不行……我需要做的是让这 50 页按原样运行,而我现在正在使用 pdo 编写这一页,这甚至可能吗?谢谢你的时间^^
      • 如果您必须更改大量代码,重构会很有用。但是,是的,如果你想同时使用两者,你​​必须建立两个连接。
      • 是否有一个简单的理由来重构我的代码?我目前正在从事一项我没有开始自己的工作,它是由另一个程序员完成的,现在我必须适应他的代码......这有点苛刻,因为每个人都有自己的风格,所以我宁愿现在保持原样,因为这个软件一直使用到现在没有任何问题...... thx btw ^^ 我是否需要在打开 pdo 之前关闭 mysql 连接,或者我可以同时打开同时? ^^
      • 也许你可以使用像 netbeans 或 eclipse 这样的 IDE
      • 我找到了一个脚本,可以让你迁移到 mysqli,也许还可以迁移到 PDO
      【解决方案5】:

      如果您需要一个带有 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 服务器
      【解决方案6】:

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

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

      【讨论】:

      • 好的,我查看了我的 php.ini 文件,它看起来像默认启用了 pdo,我仍然需要知道我是否可以同时使用 pdo 和 mysql_*handlers...
      • @YuriCollector'sEditionRossi 更新了答案。
      • 值得一提的是,您需要在之后重新启动 apache 才能应用更改。
      • @jonaspas 如果您使用的是 ubuntu,请尝试使用 sudo apt-get update 进行更新,然后从答案运行原始安装。
      • 感谢 ryAn_Hdot!但这对我也不起作用。我现在的解决方案:我正在运行 php7,我必须这样做 sudo apt-get install php-mysql
      猜你喜欢
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 2020-10-25
      相关资源
      最近更新 更多