不久前,我被建议更改我的代码以使用PDO来参数化我的查询并安全地将HTML保存在数据库中。
嗯,这是主要问题:
我看了http://php.net/manual/en/ref.pdo-mysql.php,我真的没有把$ ./configure --with-pdo-mysql
字符串放在哪里......
我正在构建的网站实际上只需要PDO一页。虽然我可能会考虑重写它,但它需要一段时间,我需要很快运行页面,所以我不能完全关闭MySQL。如果我安装PDO,我仍然可以使用mysql_*
处理程序吗?
有问题的服务器正在运行PHP版本5.4.6-1ubuntu1和Apache / 2.2.22(Ubuntu)。如果重要的话,我也在运行phpMyAdmin数据库。
答案 0 :(得分:177)
在Ubuntu上,您应该可以使用sudo apt-get install php5-mysql
同时使用PDO和mysql_之间没有限制。但是,您需要为数据库创建两个连接,一个使用mysql_,另一个使用PDO。
答案 1 :(得分:24)
这是一个很好的问题,但我认为你只是误解了你所读的内容。
如果您编译自己的PHP代码,那么./config --with-pdo-mysql
就必须放在上。如果使用包管理器安装它,则只需使用Jany Hartikainen提供的命令行:sudo apt-get install php5-mysql
以及sudo apt-get install pdo-mysql
除了真的不鼓励mysql_之外,它们都是独立的。如果使用PDO,则不涉及mysql_,如果使用mysql_ PDO则不需要。
如果在不更改代码中的任何行的情况下关闭PDO,则不会出现问题。但是既然你开始用PDO连接和编写查询,你必须保留它并放弃mysql _。
几年前,MySQL团队向migrate to MySQLi发布了一个脚本。我不知道它是否可以定制,但它是正式的。
答案 2 :(得分:15)
基本上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/
答案 3 :(得分:7)
使用它的目的是在用户界面和数据库之间实现额外的安全层。通过使用此层,可以在将数据插入数据结构之前对数据进行规范化。 (首都是首都,没有前导或尾随空格,所有日期都正确形成。)
但是你可能没有注意到这方面的一些细微差别。
首先,到目前为止,您可能已将所有查询都写入类似于URL的内容,并使用URL本身传递参数。使用PDO,所有这些都是在用户界面级别完成的。用户界面将球传递给PDO,PDO将其带到现场并将其植入数据库以获得7分TOUCHDOWN ..他得到7分,因为他得到了7分,并且比通过URL传递信息更加安全
您还可以使用数据层将您的网站强化为SQL injection。通过使用这个中间层,它是与数据库本身对话的唯一“玩家”,我相信你可以看到它如何更加安全。数据层到数据库的接口,数据层到数据库到数据层的接口。
和
通过在编写代码时实施最佳实践,您将对结果更加满意。
其他来源:
Re:MySQL函数在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 :(得分:6)
首先通过运行命令sudo apt-get install php*-mysql
安装必要的PDO部件,其中*是php的版本名称,如5.6,7.0,7.1,7.2安装后需要提及(取消注释,如果已经存在)这两个语句
extension=pdo.so
extension=pdo_mysql.so
在您的.ini文件中并通过命令重新启动服务器
sudo service apache2 restart
答案 5 :(得分: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