安装mysqlnd会破坏使用mysql的PHP中的现有代码吗?
我正在将我的代码从在PHP中使用mysql迁移到mysqli。为了使该功能正常工作,我需要将mysqlnd安装为。这涉及到删除现有的php mysql扩展,现在我只想确保(做这件事的人)一旦删除mysql,我会:安装mysqlnd会破坏使用mysql的PHP中的现有代码吗?,php,mysql,mysqlnd,Php,Mysql,Mysqlnd,我正在将我的代码从在PHP中使用mysql迁移到mysqli。为了使该功能正常工作,我需要将mysqlnd安装为。这涉及到删除现有的php mysql扩展,现在我只想确保(做这件事的人)一旦删除mysql,我会: yum remove php-mysql 并使用以下内容安装mysqlnd: yum install php-mysqlnd 另一个使用mysql的代码(有很多现有的代码库)仍然可以工作吗 我的PHP版本是5.3.27,包含PHP mysql和PHP mysqlnd两个驱动程序,您
yum remove php-mysql
并使用以下内容安装mysqlnd:
yum install php-mysqlnd
另一个使用mysql的代码(有很多现有的代码库)仍然可以工作吗
我的PHP版本是5.3.27,包含
PHP mysql
和PHP mysqlnd
两个驱动程序,您拥有mysql
,mysqli
和PDO
驱动程序。如果您只需要mysqli
驱动程序,那么您已经在php-mysql
中使用了它
但是,如果要根据文档迁移到MySQL本机驱动程序,则必须注意以下几点:
--新的mysqlnd库需要使用MySQL 4.1的更新版本
41字节密码格式。继续使用旧的16字节密码
将导致mysql_connect()和类似函数发出错误,
“mysqlnd无法使用旧身份验证连接到MySQL 4.1+。”
--新的mysqlnd库不读取mysql配置文件
(my.cnf/my.ini),就像旧的libmysqlclient库一样。如果你的
代码依赖于配置文件中的设置,您可以加载它
显式地使用mysqli_options()函数。请注意,这意味着
特定于PDO的常量PDO::MYSQL\u ATTR\u READ\u DEFAULT\u文件和
PDO::MYSQL\u ATTR\u READ\u DEFAULT\u如果中支持MYSQL,则未定义该组
PDO是用mysqlnd编译的
一般来说,从MySQL驱动程序迁移到MySQL本机驱动程序不会有任何问题。还建议使用php mysqlnd而不是php mysql。对于
php mysql
和php mysqlnd
这两种驱动程序,您将拥有mysql
、mysqli
和PDO
驱动程序。如果您只需要mysqli
驱动程序,那么您已经在php-mysql
中使用了它
但是,如果要根据文档迁移到MySQL本机驱动程序,则必须注意以下几点:
--新的mysqlnd库需要使用MySQL 4.1的更新版本
41字节密码格式。继续使用旧的16字节密码
将导致mysql_connect()和类似函数发出错误,
“mysqlnd无法使用旧身份验证连接到MySQL 4.1+。”
--新的mysqlnd库不读取mysql配置文件
(my.cnf/my.ini),就像旧的libmysqlclient库一样。如果你的
代码依赖于配置文件中的设置,您可以加载它
显式地使用mysqli_options()函数。请注意,这意味着
特定于PDO的常量PDO::MYSQL\u ATTR\u READ\u DEFAULT\u文件和
PDO::MYSQL\u ATTR\u READ\u DEFAULT\u如果中支持MYSQL,则未定义该组
PDO是用mysqlnd编译的
一般来说,从MySQL驱动程序迁移到MySQL本机驱动程序不会有任何问题。它还建议使用php mysqlnd而不是php mysql。我想大致回答,不,仅仅删除php mysql并安装php mysqlnd是不安全的,特别是如果你不是“服务器高手”。因为一旦我删除了php mysql,我就同时删除了phpmyadmin,这真是一场灾难
我最终(在Rackspace服务器的帮助下)将我的PHP升级到5.4(在我将所有代码转换为使用mysqli之前,还不能升级到5.5),然后手动强制安装
php54-mysqlnd-5.4.17-1.ius.el6.x8664
(),因为尝试“正常方式”时出错错误:php54 mysql与php54-mysqlnd-5.4.17-1.ius.el6.x86_64冲突
。希望这能对其他人有所帮助。我想大致回答一下,不,仅仅删除php mysql并安装php mysqlnd是不安全的,特别是如果你不是“服务器高手”。因为一旦我删除了php mysql,我就同时删除了phpmyadmin,这真是一场灾难
我最终(在Rackspace服务器的帮助下)将我的PHP升级到5.4(在我将所有代码转换为使用mysqli之前,还不能升级到5.5),然后手动强制安装
php54-mysqlnd-5.4.17-1.ius.el6.x8664
(),因为尝试“正常方式”时出错错误:php54 mysql与php54-mysqlnd-5.4.17-1.ius.el6.x86_64冲突
。希望这对其他人有所帮助。也要注意mysqlnd以数字形式返回数字,而libmysqlclient(php-mysql)以字符串形式返回所有类型
因此,如果使用==
,可能会产生意外行为
以开发环境中的mysqlnd和生产环境中的libmysqlclient为例,我比较了字符串值和整数值,但在开发服务器上它们都是整数。还要注意mysqlnd以数字形式返回数字,而libmysqlclient(php-mysql)以字符串形式返回所有类型 因此,如果使用
==
,可能会产生意外行为
开发环境中的mysqlnd和生产环境中的libmysqlclient都出现了一些错误,我将字符串值和整数值进行了比较,但在开发服务器上它们都是整数。我知道这很旧,只是偶然出现,但为什么手动下载和上传phpmyadmin会是一场灾难?我会使用他们网站上的更新包,他们会更新和修复很多东西。这是一个系统管理失败-不是代码失败。根据我的经验,升级没有造成任何问题。如果您使用的是Debian,那么“apt get install php5 mysqlnd”工作正常,不会破坏任何东西。我想说,这不是库的问题,而是管理员不理解打包系统的错误或包中的错误。如果php-mysql和php-mysqlnd包具有相同的依赖项,包括phpmyadmin,那么可以简单地安装php-mysqlnd并解决明显的冲突(这会导致php-mysql被卸载)。我只是在Ubuntu 14.04上做了这个,没有任何问题。我知道这很旧,只是有点问题