【发布时间】:2016-12-14 16:10:08
【问题描述】:
我有一个 php 类/函数,允许我对数据库执行查询,然后返回结果的关联数组。
在我的本地开发环境 (MAMP) 上一切正常。
一旦我将站点移到了 godaddy Linux 共享主机上,我会收到以下错误:致命错误:调用 /home/username/public_html 中未定义的方法 mysqli_stmt::get_result() /dev.x-matcher.com/admin/classes/c_RequeteSQL.php 第 146 行
我已按照以下文章 (https://ca.godaddy.com/help/enable-custom-php-modules-12036) 将 PHP 版本从原生 5.4 更改为 5.4,从而启用 mysqlnd 自定义扩展。
Godaddy CPANEL - Select PHP Version
一旦激活错误消失,但脚本仍然在同一个地方阻塞,所以仍然无法工作。
我还尝试保留 5.4 本机版本的 PHP 并上传一个自定义 php.ini 文件,我在其中添加了以下行:extension=php_mysqli_mysqlnd.so 但仍然无法正常工作...
我已经阅读了很多这样的帖子(stackoverflow.com/questions/8321096/call-to-undefined-method-mysqli-stmtget-result),但找不到任何解决我的问题的方法。
我知道我可以使用 bind_param 和 fetch 来解决这个问题,但我不想这样做,因为我的函数需要在关联中动态获取结果数组,然后返回数组。使用 bind_param 会强制我输入变量,并且由于返回变量的数量永远不会相同,具体取决于请求它不是我正在寻找的解决方案..
如果你点击这个链接,你可以看到我的 phpinfo:dev.x-matcher.com/phpinfo.php
正如解释的那样,我的整个编码在我的本地环境中 100% 工作,但这是我的课程以防万一:
class RequeteSQL {
private $dbhost = 'localhost';
private $dbuser = 'user';
private $dbpass = 'pass';
function retourArray($requete,$lettres,$parametres){
global $dbhost;
global $dbuser;
global $dbpass;
$basededon = "db";
$connection = new mysqli($dbhost,$dbuser,$dbpass,$basededon);
$statement = $connection->prepare($requete);
if ($statement === false) {
trigger_error('Probleme avec la requete SQL :' . $requete . ' Erreur code : ' . $connection->error, E_USER_ERROR);
} else {
if ($parametres!=NULL) {
if (is_array($parametres)) {
$a_params = array();
$param_type = '';
$n = count($lettres);
for ($i = 0; $i < $n; $i++) {
$param_type .= $lettres[$i];
}
$a_params[] = & $param_type;
for ($i = 0; $i < $n; $i++) {
$a_params[] = & $parametres[$i];
}
call_user_func_array(array($statement, 'bind_param'), $a_params);
} else {
$statement->bind_param($lettres,$parametres);
}
}
$statement->execute();
$resultat = $statement->get_result();
$resultarray = $resultat->fetch_all(MYSQLI_ASSOC);
$statement->close();
$connection->close();
return $resultarray;
}
}
function __destruct(){
}
}
我在服务器上做错了什么,所以 php_mysqli_mysqlnd 无法正常工作,或者是否有支持此扩展的托管服务?
【问题讨论】:
-
“脚本仍然在同一个地方阻塞”是什么意思。没有错误?会发生什么?
-
是的,这真的很奇怪。以下错误“致命错误:在第 146 行的 /home/username/public_html/dev.x-matcher.com/admin/classes/c_RequeteSQL.php 中调用未定义的方法 mysqli_stmt::get_result()”只是消失但没有改善停在同一个地方。 (*对不起英语不是我的第一语言)
-
我使用 bind_param 进行了测试,并使用预先选择的请求获取并获得了正确的变量,将相同的请求与 get_result 一起使用,但一无所获。正如所解释的,虽然请求永远不会相同(通过另一个脚本动态发送)所以对我不起作用......
-
当您拨打
phpinfo()时,mysqlnd会出现吗?还要确保启用错误报告并将其设置为E_ALL -
mysqlnd 显示已启用,我刚刚将 php.ini 更新为 E_ALL 和 E_NOTICE。仍然没有错误消息,但它可能必须刷新