1

我正在将我的代码从在 PHP 中使用 mysql 转移到 mysqli。为了让mysqli get_result()函数正常工作,我需要安装 mysqlnd,如此处所述。这涉及删除现有的 php-mysql 扩展,现在我只想确保(那些这样做的人)一旦我删除了 mysql:

yum remove php-mysql

并安装mysqlnd:

yum install php-mysqlnd

使用 mysql 的其他代码(有很多现有的代码库)仍然可以工作吗?

我的 PHP 版本是 5.3.27

4

3 回答 3

7

和你有,php-mysql和司机一起。如果您只需要驱动程序,您已经拥有它。php-mysqlndmysqlmysqliPDOmysqliphp-mysql

但是,如果您想迁移到 MySQL 原生驱动程序,根据文档,您必须注意这些:

--新的 mysqlnd 库需要使用 MySQL 4.1 更新的 41 字节密码格式。继续使用旧的 16 字节密码将导致 mysql_connect() 和类似函数发出错误,“mysqlnd cannot connect to MySQL 4.1+ using old authentication。” 这

--new mysqlnd 库不像旧的 libmysqlclient 库那样读取 mysql 配置文件 (my.cnf/my.ini)。如果您的代码依赖于配置文件中的设置,您可以使用 mysqli_options() 函数显式加载它。请注意,这意味着如果使用 mysqlnd 编译 PDO 中的 MySQL 支持,则未定义 PDO 特定常量 PDO::MYSQL_ATTR_READ_DEFAULT_FILE 和 PDO::MYSQL_ATTR_READ_DEFAULT_GROUP。

一般来说,从 MySQL 驱动程序迁移到 MySQL 原生驱动程序没有任何问题。还建议使用 php-mysqlnd 而不是 php-mysql。

于 2013-08-21T08:24:26.437 回答
1

我想一般回答说不,仅删除 php-mysql 并安装 php-mysqlnd 是不安全的,特别是如果您不是“服务器人”。因为一旦我删除了 php-mysql,我就把 phpmyadmin 连同它一起删除了,那真是一场灾难。

我最终(在 Rackspace 服务器人员的帮助下)将我的 PHP 升级到 5.4(在我将所有代码转换为使用 mysqli 之前还不能升级到 5.5),然后手动强制安装php54-mysqlnd-5.4.17-1.ius.el6.x86_64http://dev.mysql .com/downloads/connector/php-mysqlnd/),因为在尝试“正常方式”时出错Error: php54-mysql conflicts with php54-mysqlnd-5.4.17-1.ius.el6.x86_64。希望这可以帮助某人。

于 2013-08-22T06:20:32.107 回答
1

还要注意 mysqlnd 以数字形式返回数字,而 libmysqlclient (php-mysql) 以字符串形式返回所有类型。

因此,如果您使用===,它可能会产生意想不到的行为。

在开发环境中使用 mysqlnd 和在生产环境中使用 libmysqlclient 时遇到了一些错误,我比较了字符串值和整数值,但在开发服务器上它们都是整数。

于 2019-01-10T08:54:59.457 回答