2016-12-14 11 views
2

私はDB上でクエリを実行し、結果の連想配列を返すPHPクラス/関数を持っています。mysqli_stmt :: get_result()が動作しません。PHPバージョンが更新され、mysqlndが有効になりました。

私のローカル開発環境(MAMP)ではすべてが正常に動作します。

私は、私は次のエラーを取得するホスティングGoDaddyはLinuxの共有にサイトを移動したら:致命的なエラー:未定義のメソッドmysqli_stmtに呼び出し:: get_result()/home/username/public_html/dev.x-matcherでライン上.COM /管理/クラス/ c_RequeteSQL.php

私は5.4にネイティブ5.4からPHPのバージョンを変更して、mysqlndのカスタム拡張を有効にするために、次の記事(https://ca.godaddy.com/help/enable-custom-php-modules-12036)を続いています。

Godaddy CPANEL - Select PHP Version

は一度そう、まだ機能していない、同じ場所でdisapearsが、スクリプトまだブロックをエラーを活性化しました。 ...私が持っている

を延長= php_mysqli_mysqlnd.so、まだ動作していない:

は、私はまた、PHP 5.4のネイティブバージョンを保持し、私は次の行を追加したカスタムのphp.iniファイルをアップロードしようとしていますこの1つのようなスレッドをたくさん読んでください(stackoverflow.com/questions/96/call-to-undefined-method-mysqli-stmtget-result)しかし、私の問題の解決策を見つけることができませんでした。

私はbind_param問題に対処するためにをフェッチが、私は私の機能を動的連想配列で結果をフェッチして、配列を返す必要があるとして、そうしたくないを使用することができることを理解しています。 bind_paramを使用すると、変数を入力するよう強制されます。返される変数の数は、要求に応じて決して同じではないため、私が探している解決法では決してありません。

このリンクをたどると私のphpinfoが見えます。 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が動作していないか、DOがこの拡張機能をサポートしているホスティングサービスがありますか?

+0

「スクリプトは同じ場所にブロックされています」とはどういう意味ですか?エラーはありませんか?何が起こるのですか? – simon

+0

はい、本当に変です。次のエラー "致命的なエラー:146行目の/home/username/public_html/dev.x-matcher.com/admin/classes/c_RequeteSQL.phpの未定義メソッドmysqli_stmt :: get_result()の呼び出しは、単に消滅しますが、改善はありません同じ場所で止まる。 (*ごめんなさい、英語は私の最初の時間軸ではない) –

+0

私はbind_paramを使ってテストを行い、あらかじめ選択されたリクエストを取得して正しい変数を取得し、get_resultで同じリクエストを使用して何も得られませんでした。説明したように、要求は決して同じではありません(動的に別のスクリプトを介して送信される)ので、私にとってはうまくいかないでしょう... –

答えて

1

私は答えを見つけることができなかったので、mysqliではなくPDOを使うようにコードを変更することにしました。それは完璧に働いた。私はフランス語を話してフランス語で私のことを読むので、私はあなたを正しいチュートリアルに送ることができません。しかし、PDOを使用するための多くのリソースがあります。かなり簡単です。お役に立てれば。

+0

それはあなたの良い考えだった。チュートリアルの時点で、私は良い([唯一の適切な)PDOチュートリアル](https://phpdelusions.net/pdo)を書いたので、これをお勧めします:) –

関連する問題