2016-12-14 80 views
2

我有一个php类/函数,允许我对数据库执行查询,然后返回结果的关联数组。mysqli_stmt :: get_result()不工作,PHP版本更新和mysqlnd启用

在我的本地开发环境(MAMP)上,一切正常。

一旦我感动主机我得到以下错误在GoDaddy的Linux共享网站:致命错误:在/home/username/public_html/dev.x-matcher调用未定义的方法mysqli_stmt :: get_result()

我按照以5.4原生5.4改变PHP版本,因此使mysqlnd自定义扩展下面的文章(https://ca.godaddy.com/help/enable-custom-php-modules-12036)上线的.com /管理/班/ c_RequeteSQL.php

Godaddy CPANEL - Select PHP Version

一旦激活错误在前看不见但脚本仍然块在同一个地方,因此仍无法正常工作。

我也试图让PHP的5.4原生版本并上传中,我添加了以下行的自定义php.ini文件:延长= php_mysqli_mysqlnd.so,仍然没有工作...

我有阅读了很多像这样的线程(stackoverflow.com/questions/96/call-to-undefined-method-mysqli-stmtget-result),但无法找到解决我的问题的方法。

我明白,我可以用bind_param为了解决这个问题,但我不希望为My功能需要动态获取关联数组的结果,然后返回数组这样做。使用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无法正常工作或者是否有支持此扩展的托管服务?

+0

你的意思是“脚本仍然在同一个地方阻塞”。没有错误?怎么了? – simon

+0

是的,这真的很奇怪。下面的错误“致命错误:调用未定义的方法mysqli_stmt :: get_result()在/home/username/public_html/dev.x-matcher.com/admin/classes/c_RequeteSQL.php在线146”只是消失,但没有改善它是在同一个地方停下来。 (*我很抱歉,英文不是我的第一语言) –

+0

我已经使用bind_param进行了一次测试,并使用预先选择的请求进行了获取,并获得了正确的变量,对get_result使用了相同的请求并且没有任何结果。正如所解释的,虽然请求从不相同(通过另一个脚本动态发送),所以不适合我... –

回答

1

由于找不到答案,我决定更改我的代码以使用PDO而不是mysqli。它工作完美。自从我讲法语并用法语阅读我之后,我无法向您发送正确的教程。但是有很多资源用于使用PDO。这很容易。希望这可以帮助。

+0

这是您的一个好主意。至于本教程,我写了一个好的,[(唯一适当的)PDO教程](https://phpdelusions.net/pdo),所以你可以推荐这个:) –