【问题标题】:Instal mysqlnd in a hosted website在托管网站中安装 mysqlnd
【发布时间】:2012-12-05 16:55:40
【问题描述】:

我正在用 PHP - MySQL 开发一个网站。这里有几点需要注意:

  • 我正在使用 MySQLi API 进行数据库访问。
  • 在我本地安装的XAMPP(一台Windows 7机器)中,PHP版本是5.3.8,MySQL版本是mysqlnd 5.0.8-dev - 20102224
  • 我已将网站托管在免费托管服务器上,用于测试“cuccfree.com”。这里 PHP 版本是 5.3.14,MySQL 版本是 5.1.66。与许多其他托管公司相比,它仍然对 MySQLi 提供更好的支持。
  • 在 phpinfo'ing 中,本地机器显示 mysqlnd 驱动已安装,但托管服务器没有。
  • 我为 MySQLi 创建了一个包装类,它使用函数 mysqli_stmt::get_result() 获取 ResultSet。这个函数可以在我的本地机器上运行,但不能在 cuccfree.com 托管服务器上运行,因为 mysqli 对象没有名为 get_result() 的方法。不过,mysqli_stmt 对象已准备并成功bind_param'ed
  • php.netmysqli_stmt 的手册页说要使用 mysqli_stmt::get_result(),我们需要有 mysqlnd 驱动程序已安装。
  • 服务器的配置提供了 mysqli_stmt::bind_object() 的使用。但是get_result() 对我来说似乎是一个更好的选择,因为我们可以得到数组形式的结果。我已经使用以下行重写了函数以接受可变数量的参数:

    call_user_func_array(array($stmt, 'bind_param'), $params);

其中 $params 是一个参数数组。

  • 使用 bind_object(),我必须将返回的每一列绑定到一个变量。在这种情况下,我无法创建一个包装类函数来一次性处理所有 SQL 查询。

我找了几家托管公司,与许多公司的客户支持交谈并邮寄,包括 GoDaddy 和 Manas Hosting,他们不提供 mysqlnd 的使用。他们非常合乎逻辑地坚持使用 VPS 或专用服务器。显然,这两种建议的选择都非常昂贵,即使在入门级也是如此。

那么,最后我的问题是,我们可以将 mysqlnd 安装/嵌入到 Linux 服务器上的网站中吗?如果没有,我有什么替代方法可以防止我更改整个网站的代码,这将花费我很多天?

问候

【问题讨论】:

    标签: php mysqli mysqlnd


    【解决方案1】:

    我以前也经历过这种情况,而且它是一个真正的食客。如果您不想升级到 VPS,唯一的解决方案是使用 PDO。您可以尝试在共享主机帐户中进行 SSH,但如果尝试更改任何内容,则祝您好运,因为网络管理员在网络托管方面很聪明。我什至甚至从/etc/ 中删除了yum.conf 的网络托管服务商,并拒绝允许您无法通过yum 安装任何软件包。但是,如果您获得了 VPS 并且拥有 cpanel,则可以更改 PHP 的配置选项。我花了很长时间才弄清楚这一点,但我了解到您可以通过运行 /usr/local/cpanel/scripts/easyapache 来更改 CPanel 中的 PHP 选项。如果您运行 Apache 2.2,您还可以按照本文档更改 PHP 配置选项的配置选项。没有VPS,我很确定没有办法像那样改变CPanel。我希望这篇文章能有所帮助。

    【讨论】:

    • 再次感谢。自从将您的回复标记为答案后,我开始将所有数据库访问代码转换为 PDO。从那以后,我在任何服务器上都没有遇到过问题。
    【解决方案2】:

    除非您的托管公司启用了dl() 的使用,我几乎可以保证他们没有启用,否则不会。

    您已经指出的第二个选项是为 mysqlnd 编写(或查找,它们可能存在,也许其他人可以指出您的方向)一个兼容层。我假设自从您自己编写以来,还没有一个存在。很不幸,我相信你陷入了困境。

    无论如何,你下次真的应该使用 PDO :) 但我知道,事后看来是 20/20,所以...

    【讨论】:

    • dl() 不起作用。必须卸载基于 libmysql 的 mysqli,然后卸载 dl() mysqlnd 和基于 mysqlnd 的 mysqli。
    • @nezZario:我学到了一个教训——“使用 PDO”。下一次,就OK了。这次我必须自己做点什么。想不通,如果托管服务器上不可用,为什么 mysqlnd 会随 XAMPP 一起提供。
    • @kush.impetus 共享托管公司必须做出很多妥协,通常会选择较旧的稳定版本的工具/库,因为目标受众。大多数使用(廉价)共享主机的人都在运行旧版本的 web 应用程序和框架,它们并不总是适用于较新的 PHP 版本和库。他们选择稳定性和可预测性而不是性能或尖端。 XAMPP 不是专门为共享主机设计的,也没有这个限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多