我正在将我的代码从使用PHP中的mysql移动到mysqli。为了使mysqli get_result()函数起作用,我需要将mysqlnd安装为said here on SO。这涉及删除现有的php-mysql扩展,现在我只想确定(那些做过这个的人),一旦我删除了mysql:
yum remove php-mysql
并安装mysqlnd:
yum install php-mysqlnd
使用mysql的其他代码(有很多现有的代码库)仍然有效吗?
我的PHP版本是5.3.27
答案 0 :(得分:7)
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_ATTR_READ_DEFAULT_FILE和 如果MySQL支持,则不定义PDO :: MYSQL_ATTR_READ_DEFAULT_GROUP PDO是用mysqlnd编译的。
通常,从MySQL驱动程序迁移到MySQL本机驱动程序没有任何问题。它还建议使用php-mysqlnd而不是php-mysql。
答案 1 :(得分:1)
我想一般回答说不,删除php-mysql并安装php-mysqlnd是不安全的,特别是如果你不是“服务器人”。因为一旦我删除了php-mysql,我就删除了phpmyadmin,这真是一场灾难。
我最终(在Rackspace服务器人员的帮助下)将我的PHP升级到5.4(直到我将所有代码转换为使用mysqli后才能转到5.5)然后手动强制安装php54-mysqlnd-5.4.17-1.ius.el6.x86_64
(http://dev.mysql.com/downloads/connector/php-mysqlnd/),因为尝试“正常方式”Error: php54-mysql conflicts with php54-mysqlnd-5.4.17-1.ius.el6.x86_64
时出错。希望这有助于某人。
答案 2 :(得分:1)
另外请注意,mysqlnd返回的数字是数字,而libmysqlclient(php-mysql)返回的所有类型都是字符串。
因此,如果您使用===
,则可能会产生意外的行为。
在开发环境中使用mysqlnd的情况下,在生产环境中使用libmysqlclient的情况下,我遇到了一些错误,在这些错误中我比较了字符串值和整数值,但在dev服务器上,它们都是整数。