正如标题所示,我在运行PHP 5.4版的共享托管服务器上提供了mysqlnd.当我尝试调用mysqli get_result()函数时,我收到此错误.
我和托管服务提供商多次谈过,最近他们告诉我尝试运行
# /opt/ntphp/php54/bin/php -i | grep -i mysqlnd
Run Code Online (Sandbox Code Playgroud)
我跳了ssh并运行了这个命令:
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $
Loaded plugins => mysqlnd,example,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password
mysqlnd statistics =>
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: c85105d7c6f7d70d609bb4c000257868a40840ab $
Run Code Online (Sandbox Code Playgroud)
所以,正如我所料,这在我看来.
我在另一个论坛帖子上发现了另一段PHP代码,建议运行:
$hasMySQL = false; $hasMySQLi = false; $withMySQLnd = false; $sentence = '';
if (function_exists('mysql_connect')) {
$hasMySQL = true;
$sentence.= "(Deprecated) MySQL <b>is installed</b> "; } else
$sentence.= "(Deprecated) MySQL <b>is not</b> installed ";
if (function_exists('mysqli_connect')) {
$hasMySQLi = true;
$sentence.= "and the new (improved) MySQL <b>is installed</b>. "; } else
$sentence.= "and the new (improved) MySQL <b>is not installed</b>. ";
if (function_exists('mysqli_get_client_stats')) {
$withMySQLnd = true;
$sentence.= "This server is using MySQLnd as the driver."; } else
$sentence.= "This server is using libmysqlclient as the driver.";
echo $sentence;
Run Code Online (Sandbox Code Playgroud)
我这样做了并得到了结果:
(已弃用)已安装MySQL并安装了新的(改进的)MySQL.此服务器使用libmysqlclient作为驱动程序.
我正在使用Arvixe运行我的托管,他们有一篇博文,基本上说"运行PHP 5.4,这将工作".我很清楚他们认为这个功能应该运行,但它给了我一个致命的错误.
旁注 - 代码在我的本地机器上运行完美,并且我只在调用get_result()时出错.
编辑:
以下是PHP的设置方法:
$stmt = $con->prepare("SELECT * FROM User_Details WHERE LCASE(username) = LCASE(?) LIMIT 1");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result(); // This line throws the ugly error
Run Code Online (Sandbox Code Playgroud)
对于任何想知道这是怎么回事并使用 Arvixe 的人。这是我从工作人员那里收到的回复。
这是围绕 MySQLND 的一些混乱,这是由旧平台引起的,我将与我的员工沟通。
我们曾经运行一个允许单独安装 PHP 的系统,当时 5.4 和 5.5 都运行了 MysqlND。我们现有的新 PHP 系统在一致的配置上运行所有 PHP 安装,因此我们的 PHP 5.3 安装(基本安装)不使用 MySQLND,5.4 或 5.5 安装也不使用 MySQLND。
将来将会对此进行审查,因为 PHP 5.6 将默认使用 MySQLND。
目前,我们支持 MySQLND 的唯一方法是通过 VPS/专用服务器。
因此,如果您使用的是 Arvixe 而不是 VPS,那么您就无法使用超级常见且推荐的约定从数据库检索数据。有多种不同方法可以解决此问题。它们要么对我的项目不可行,要么我无法让它们工作,但对于较小的查询,似乎使用 $stmt->bind_result() 是更流行的方法之一。 http://php.net/manual/en/mysqli-stmt.bind-result.php
对我来说,我将把我的业务带回 GoDaddy。我花了 10 多个小时试图找到解决方案,但没有提供任何解决方案,除了“如果您不满意,我们有 60 天退款保证”。
感谢大家对此提供的帮助。尽管令人沮丧,但我在这个过程中并从这些董事会中学到了很多东西......就像通常的情况一样。
| 归档时间: |
|
| 查看次数: |
5647 次 |
| 最近记录: |