2016-12-14 73 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),所以你可以推薦這個:) –