5

我正在用 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对象已准备好成功绑定参数。
  • 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 服务器上的网站中吗?如果没有,我有什么替代方法可以阻止我更改整个网站的代码,这将花费我很多天?

问候

4

2 回答 2

2

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

于 2013-08-20T09:19:19.830 回答
1

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

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

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

于 2012-12-05T17:09:33.177 回答