正如标题所示,我在运行PHP 5.4版的共享主机服务器上有mysqlnd。当我尝试调用mysqli get_result()函数时,我收到此错误。
我已与托管服务提供商多次通话,最近他们告诉我尝试运行
# /opt/ntphp/php54/bin/php -i | grep -i mysqlnd
我跳了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 $
所以,正如我所料,这在我看来。
我在另一个论坛帖子上发现了另一段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;
我这样做了并得到了结果:
(已弃用)安装了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
答案 0 :(得分:4)
任何人都想知道这是怎么回事,并使用Arvixe。以下是我从工作人员那里得到的回复。
这是一个围绕MySQLND的混乱,这是由旧的引起的 平台及其我将与我的员工沟通的东西。
我们曾经运行过一个允许我们拥有个人PHP的系统 安装并且在那时5.4和5.5都运行了MysqlND。该 我们现有的新PHP系统在一致的情况下运行所有PHP安装 配置因此我们的PHP 5.3安装(基本安装)没有 使用MySQLND也不会安装我们的5.4或5.5。
将来会对此进行审核,因为PHP 5.6将具有MySQLND 默认。
目前我们支持MySQLND的唯一方法是通过VPS /专用 服务器
因此,如果您使用的是Arvixe而不是VPS,那么使用超常用且推荐的约定从数据库中检索数据是不合时宜的。使用大量不同的方法可以解决这个问题。它们要么对我的项目不可行,要么我无法使它们工作,但对于较小的查询,似乎使用$ stmt-&gt; bind_result()是一种比较流行的方法。 http://php.net/manual/en/mysqli-stmt.bind-result.php
对我来说,我把我的生意带回了GoDaddy。我花了10多个小时试图找到解决方案而没有提供解决方案,除了#34;如果你不满意,我们有60天的退款保证。&#34;
感谢大家帮忙解决这个问题。令人沮丧的是,我在这个过程中从这些董事会中学到了很多......通常就是这样。
答案 1 :(得分:1)
当您运行通过Web服务器检查PHP环境的代码时?我问这个问题,因为听起来你还没有将你的网络服务器配置为使用PHP 5.4(据说你有以后的mysqli版本)。
您可能需要参考Arvixe的this article。
有趣的是,从PHP 5.3开始,似乎the function that's causing trouble可用。
您也可以尝试使用简单的脚本从网上查看环境
<?php
phpinfo();
从网上点击并检查一些事情
就个人而言,我不确定mysqlnd是否需要提供get_results
功能(但需要深入挖掘才能确定)。
你可以做的另一项测试,看看Arvixe的PHP 5.4环境实际上是否提供了感兴趣的功能,测试你知道有mysql的CLI环境
/opt/ntphp/php54/bin/php -r 'echo method_exists("mysqli_stmt", "get_result") . PHP_EOL;'
如果它吐出1
,你几乎肯定只需要遵循我之前链接的指南,让你的网络服务器环境运行PHP 5.4。
答案 2 :(得分:1)
删除现有的php版本并安装新版本的PHP 5.5或更高版本 并通过在root终端上进行验证$ php -v