Aufruf der undefinierten Methode mysqli_stmt::get_result

Lesezeit: 7 Minuten

Aufruf der undefinierten Methode mysqli stmtget result
Kumar Kush

Hier ist mein Code:

include 'conn.php';
$conn = new Connection();
$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ?';
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);
$stmt->execute();
$result = $stmt->get_result();

Ich bekomme den Fehler in der letzten Zeile als: Aufruf der undefinierten Methode mysqli_stmt::get_result()

Hier ist der Code für conn.php:

define('SERVER', 'localhost');
define('USER', 'root');
define('PASS', 'xxxx');
define('DB', 'xxxx');
class Connection{
    /**
     * @var Resource 
     */
    var $mysqli = null;

    function __construct(){
        try{
            if(!$this->mysqli){
                $this->mysqli = new MySQLi(SERVER, USER, PASS, DB);
                if(!$this->mysqli)
                    throw new Exception('Could not create connection using MySQLi', 'NO_CONNECTION');
            }
        }
        catch(Exception $ex){
            echo "ERROR: ".$e->getMessage();
        }
    }
}

Wenn ich diese Zeile schreibe:

if(!stmt) echo 'Statement prepared'; else echo 'Statement NOT prepared';

Es druckt ‘Anweisung NICHT vorbereitet’. Wenn ich die Abfrage direkt in der IDE ersetze? markiert mit Werten, es funktioniert gut. Bitte beachten Sie, dass das $conn-Objekt in anderen Abfragen im Projekt einwandfrei funktioniert.

Bitte um Hilfe……

  • Ich glaube, du hast es vergessen $stmt = $conn->mysqli->stmt_init(); ?

    – favoretti

    30. November 2011 um 4:26 Uhr

  • Bitte überprüfen Sie diese Variablen $_POST['EmailID'], $_POST['SLA'], $_POST['Password']korrekt über ein HTML-Formular mit POST-Methode übermittelt

    – ajreal

    30. November 2011 um 4:27 Uhr

  • @ajreal: Die Variablen werden korrekt gepostet. Ich habe sie mit print_r($_POST) getestet.

    – Kumar Kush

    30. November 2011 um 15:32 Uhr

  • @favoretti: Ich habe versucht, es zu verwenden $stmt = $conn->mysqli->stmt_init();. Immer noch kein Glück.

    – Kumar Kush

    30. November 2011 um 15:35 Uhr

  • Eine Sache, die ich erwähnen möchte, ist, dass ich ähnlichen Code an anderen Stellen verwendet habe und sie gut funktionieren.

    – Kumar Kush

    30. November 2011 um 15:38 Uhr

1647069849 37 Aufruf der undefinierten Methode mysqli stmtget result
bekay

Bitte lesen Sie die Benutzerhinweise für diese Methode:

http://php.net/manual/en/mysqli-stmt.get-result.php

Es erfordert den mysqlnd-Treiber … Wenn er nicht auf Ihrem Webspace installiert ist, müssen Sie damit arbeiten bind_result() & fetch()!

  • Vielen Dank. Das hat funktioniert. Ich habe die auskommentiert extension=php_mysqli_mysqlnd.dll in php.ini; und Apache2.2 und MySQL-Dienste neu gestartet. Soll ich die Zeile auskommentieren extension=php_mysqli_libmysql.dll? Laut einer anderen Seite ist mysqlnd schneller als libmysql. Kann ich auch davon ausgehen, dass mysqlnd auf den meisten gängigen Hosting-Dienstanbietern installiert ist?

    – Kumar Kush

    1. Dezember 2011 um 17:05 Uhr

  • stmt_init() wird nur für eine prozedural vorbereitete Erklärung benötigt. du brauchst es also nicht! Aussehen: Verknüpfung Wie für die libmysql: weiß nicht. Und ich würde mich nicht auf Hosting-Provider für die Installation von verlassen mysqlnd.dll … versuchen Sie es besser mit einem Workaround!

    – bekay

    1. Dezember 2011 um 17:32 Uhr


  • Notiz: mysqli_stmt::get_result() ist nur ab PHP v5.3.0 verfügbar.

    – Raubvogel

    28. November 2012 um 13:54 Uhr

  • @bekay Du hast mir gerade einen neuen Laptop und ein neues Fenster erspart. Wenn +10 verfügbar wären, würde ich es dir geben

    – James Cushing

    24. April 2014 um 10:59 Uhr

  • @kush.impetus, Wo laden Sie herunter php_mysqli_mysqlnd.dll? Ich hätte nur php_mysqli.dll in meinem ext Mappe.

    – Schrittmacher

    29. Juni 2015 um 10:07 Uhr


1647069850 669 Aufruf der undefinierten Methode mysqli stmtget result
Bert Regulink

Wenn also der MySQL Native Driver (mysqlnd)-Treiber nicht verfügbar ist und daher verwendet wird bind_result und bringen anstatt get_resultder Code wird zu:

include 'conn.php';
$conn = new Connection();
$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ?';
$stmt = $conn->mysqli->prepare($query);
$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);
$stmt->execute();
$stmt->bind_result($EmailVerified, $Blocked);
while ($stmt->fetch())
{
   /* Use $EmailVerified and $Blocked */
}
$stmt->close();
$conn->mysqli->close();

  • $stmt->bind_result spart mir Zeit. Es ist eine großartige Lösung, wenn get_result nicht verfügbar ist.

    – Zafer

    11. Februar 2015 um 19:38 Uhr

  • Frage: Woher kommt die Variable $EmailVerfied?

    – Rotimi

    27. Februar 2017 um 13:19 Uhr

  • @Akintunde007: $EmailVerfied wird durch den Aufruf von erstellt bind_result().

    – AbraCadaver

    24. Januar 2018 um 18:54 Uhr


  • Erhalten eines „Uncaught Error: Call to undefined method mysqli_stmt::bind_results()“-Fehlers durch Verwendung des Codes

    – Der Traum des Teufels

    20. Februar 2018 um 8:53 Uhr

  • Wenn ich eine SQL-Abfrage wie “Select * from table_name” habe, dann wie in bind_result() zu deklarieren. * Operator

    – Inderjet

    7. August 2018 um 8:27 Uhr

Aufruf der undefinierten Methode mysqli stmtget result
M_R_K

Ihrem System fehlt der mysqlnd-Treiber!

Wenn Sie neue Pakete auf Ihrem (Debian/Ubuntu-basierten) Server installieren können, installieren Sie den Treiber:

sudo apt-get install php5-mysqlnd

und starten Sie dann Ihren Webserver neu:

sudo /etc/init.d/apache2 restart

Mit PHP Version 7.2 habe ich gerade gearbeitet nd_mysqli anstatt mysql und es funktionierte wie erwartet.

Schritte, um es auf dem Godaddy-Hosting-Server zu aktivieren-

  1. Melden Sie sich bei cpanel an.
  2. Klicke auf „PHP-Version auswählen“.
  3. Deaktivieren Sie wie vorgesehen den Snapshot der neuesten Konfigurationen “mysqli” und ermöglichen “nd_mysqli”.

Geben Sie hier die Bildbeschreibung ein

1647069852 84 Aufruf der undefinierten Methode mysqli stmtget result
MeisterKitano

für diejenigen, die eine Alternative zu suchen $result = $stmt->get_result() Ich habe diese Funktion erstellt, mit der Sie das nachahmen können $result->fetch_assoc() aber direkt das stmt-Objekt verwenden:

function fetchAssocStatement($stmt)
{
    if($stmt->num_rows>0)
    {
        $result = array();
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$result[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        if($stmt->fetch())
            return $result;
    }

    return null;
}

Wie Sie sehen können, erstellt es ein Array und ruft es mit den Zeilendaten ab, da es verwendet wird $stmt->fetch() intern können Sie es genauso nennen, wie Sie anrufen würden mysqli_result::fetch_assoc (Stellen Sie nur sicher, dass die $stmt Objekt ist geöffnet und Ergebnis wird gespeichert):

//mysqliConnection is your mysqli connection object
if($stmt = $mysqli_connection->prepare($query))
{
    $stmt->execute();
    $stmt->store_result();

    while($assoc_array = fetchAssocStatement($stmt))
    {
        //do your magic
    }

    $stmt->close();
}

  • Wenn $statement->store_result(); vor dem Aufruf der Funktion benötigt wird, warum nicht einfach in die Funktion aufnehmen?

    – InsanityOnABun

    18. August 2016 um 20:01 Uhr

  • Schön, vielen Dank

    – Student

    4. März um 19:37 Uhr

1647069852 781 Aufruf der undefinierten Methode mysqli stmtget result
Kirkland

Ich weiß, dass dies bereits beantwortet wurde, was das eigentliche Problem ist, aber ich möchte eine einfache Problemumgehung anbieten.

Ich wollte die Methode get_results() verwenden, aber ich hatte den Treiber nicht, und ich bin nicht irgendwo, wo ich das hinzufügen kann. Also, bevor ich anrief

$stmt->bind_results($var1,$var2,$var3,$var4...etc);

Ich habe ein leeres Array erstellt und dann die Ergebnisse einfach als Schlüssel in dieses Array gebunden:

$result = array();
$stmt->bind_results($result['var1'],$result['var2'],$result['var3'],$result['var4']...etc);

sodass diese Ergebnisse einfach an Methoden übergeben oder zur weiteren Verwendung in ein Objekt umgewandelt werden können.

Ich hoffe, das hilft jedem, der etwas Ähnliches vorhat.

  • Wenn $statement->store_result(); vor dem Aufruf der Funktion benötigt wird, warum nicht einfach in die Funktion aufnehmen?

    – InsanityOnABun

    18. August 2016 um 20:01 Uhr

  • Schön, vielen Dank

    – Student

    4. März um 19:37 Uhr

1647069853 159 Aufruf der undefinierten Methode mysqli stmtget result
Ban-Geoengineering

Ich habe denselben Fehler auf meinem Server erhalten – PHP 7.0 mit dem mysqlnd Erweiterung bereits aktiviert.

Lösung war für mich (danke an diese Seite) war, die abzuwählen mysql Erweiterung und wählen Sie aus nd_mysqli stattdessen.

NB – Sie können möglicherweise auf die Erweiterungsauswahl in Ihrem cPanel zugreifen. (Ich greife auf meine über die Wählen Sie die PHP-Version aus Möglichkeit.)

  • Dies sollte die akzeptierte Antwort sein. Es ist viel besser, die Erweiterung zu aktivieren, als Ihr gesamtes Skript zu bearbeiten, um eine andere Methode zu verwenden! Oh und bei mir hat es funktioniert 🙂

    – ArabianMaiden

    23. März 2019 um 10:31 Uhr


  • Ich hatte das gleiche Problem. In der Tat mit PHP session_start() Funktion machte mich wie ein nicht vorhandener Wert. Dann habe ich auf die Version aktualisiert 7.2 von PHP und änderte die Erweiterung von mysqli zu nd_mysqli (Fest). Aber ich habe zwei Fragen, was ist der Unterschied zwischen den beiden? und ob es eine Sicherheitslücke für die Verwendung dieser Erweiterung geben würde?

    – jecorrales

    4. Juli 2019 um 17:03 Uhr

993020cookie-checkAufruf der undefinierten Methode mysqli_stmt::get_result

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy