2016-12-14 2 views
2

ich eine PHP-Klasse/Funktion haben, die mir erlauben, eine Abfrage auf der DB durchzuführen und dann ein assoziatives Array des Ergebnisses zurück.mysqli_stmt :: get_result() nicht funktioniert, PHP-Version aktualisiert und mysqlnd aktiviert

Alles funktioniert perfekt auf meiner lokalen Entwicklungsumgebung (MAMP).

Nachdem ich die Seite auf einem GoDaddy Linux-Shared-Hosting bewegte ich die folgende Fehlermeldung erhalten: Fatal error: Call to undefined Methode mysqli_stmt :: get_result() in /home/username/public_html/dev.x-matcher .com/admin/classes/c_RequeteSQL.php on line

ich den folgenden Artikel (https://ca.godaddy.com/help/enable-custom-php-modules-12036), um befolgt habe die PHP-Version von 5.4 native 5.4 und damit die mysqlnd benutzerdefinierten Erweiterung ermöglichen zu ändern.

Godaddy CPANEL - Select PHP Version

Einmal aktiviert, um den Fehler disapears aber das Skript noch Blöcke an der gleichen Stelle, so immer noch nicht funktioniert.

Ich habe auch versucht, die 5.4 native Version von PHP zu halten und eine benutzerdefinierte Datei php.ini, in dem ich die folgende Zeile hinzugefügt hochladen: extension = php_mysqli_mysqlnd.so und arbeitet immer noch nicht ...

Ich habe lese viele Threads wie diese (stackoverflow.com/questions/96/call-to-undefined-method-mysqli-stmtget-result), aber ich konnte keine Lösung für mein Problem finden.

Ich verstehe, dass ich bind_param und holen verwenden könnte, das Problem zu begegnen, aber ich will nicht, um meine Funktion Notwendigkeit tun, um dynamisch die Ergebnisse in einem assoziativen Array zu holen und dann das Array zurück. Die Verwendung von bind_param zwingt meine, die Variablen einzugeben, und da die Anzahl der zurückgegebenen Variablen nie die gleiche ist, suche ich nach der Lösung.

Sie können meinen phpinfo sehen, wenn Sie diesem Link folgen: dev. x-matcher.com/phpinfo.php

Wie erklärt meine ganze Codierung 100% auf meinem lokalen Umfeld funktioniert, aber hier ist meine Klasse für alle Fälle:

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(){ 

    } 
} 

Was bin ich auf dem Server falsch zu machen, so php_mysqli_mysqlnd funktioniert nicht ODER gibt es einen Hosting-Service, der diese Erweiterung unterstützt?

+0

Was meinst du mit „das Skript noch Blöcke an derselben Stelle“. Keine Fehler? Was geschieht? – simon

+0

Ja, es ist wirklich komisch. Der folgende Fehler "Fatal error: Call to undefined Methode mysqli_stmt :: get_result() in /home/username/public_html/dev.x-matcher.com/admin/classes/c_RequeteSQL.php on line 146" nur disapears aber keine Verbesserung, es ist hält am selben Ort an. (* Es tut mir leid Englisch ist nicht meine erste lenguage) –

+0

Ich habe habe einen Test bind_param mit und hole mit einer vorgewählten Anfrage und bekam die richtigen Variablen verwendet, um die gleiche Anfrage mit get_result und bekam nichts. Wie erklärt, obwohl die Anfrage nie die gleiche ist (dynamisch über ein anderes Skript gesendet), so wird es nicht für mich arbeiten ... –

Antwort

1

Da ich keine Antwort finden konnte, entschied ich mich meinen Code zu ändern PDO zu verwenden anstelle von mysqli. Es hat perfekt funktioniert. Ich kann Sie nicht zu einem richtigen Tutorial schicken, da ich Französisch spreche und meins auf Französisch lese. Aber es gibt eine Menge Ressourcen, um das PDO zu nutzen. Es ist ziemlich einfach. Hoffe das hilft.

+0

Das war eine gute Idee von dir. Zum Tutorial habe ich ein gutes geschrieben, [(das einzig richtige) PDO-Tutorial] (https://phddelusions.net/pdo), also kann man dieses hier empfehlen :) –

Verwandte Themen