安装mysqlnd会破坏使用mysql的PHP中的现有代码吗?

安装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两个驱动程序,您

我正在将我的代码从在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
两个驱动程序,您拥有
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上做了这个,没有任何问题。我知道这很旧,只是有点问题