调用未定义的方法mysqli_stmt :: get_result()和mysqlnd安装

dre*_*oft 5 php mysqli

正如标题所示,我在运行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)

dre*_*oft 4

对于任何想知道这是怎么回事并使用 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 天退款保证”。

感谢大家对此提供的帮助。尽管令人沮丧,但我在这个过程中并从这些董事会中学到了很多东西......就像通常的情况一样。