PDO Fehlermeldung SQLSTATE[HY093]

nchristoph

Erfahrenes Mitglied
Hallo,

ich kriege seit Heute, obwohl ich am Code nichts geändert habe, folgende Fehlermeldung:

PHP:
SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Ich konnte nach intensiver Suche die betroffene Datei finden.

Leider finde ich die betroffene Zeile nicht genau.

Meine Frage: kann ich mit Try und Catch auch die genaue Zeile ausgeben lassen? Bei Google find ich nicht wirklich was dazu.

Lt. Google ist die Fehlermeldung ein Hinweis, das ich mehr Token als Parameter verwende. Im Code verwende ich genau einen Token und es wird auch nur einer aufgerufen.

Woran könnte das noch liegen?
 
http://wiki.yaslaw.info/wikka/PhpErrorsAsExceptions

PHP:
/**
 * Fehlerbehandlung sauber definieren. Alle Errors als Exception ausgeben
 * @param $errno
 * @param $errstr
 * @param $errfile
 * @param $errline
 */
function exceptionErrorHandler($errno, $errstr, $errfile, $errline ) {
    if($errno & ini_get('error_reporting')) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
}
set_error_handler("exceptionErrorHandler");

Mit try...catch kann man nun ein sauberes Exception-Handling machen. Das gibt die Zeilennummer etc raus:
PHP:
try{
    //TODO dein Code
} catch(Exception $e){
    echo "<b>".$e->getMessage()."</b><br />\n";
    echo nl2br($e->getTraceAsString());
}
 
Danke Yaslaw, damit habe ich den fehlerhaften Code gefunden.

PHP:
 $params[':b_b_id'] = $row['b_b_id'];


        $kommentar_qry = "SELECT COUNT(id) FROM kommentar WHERE post_id = :b_b_id ORDER BY datum ASC";
        $stmt = $this->db_conn->prepare($kommentar_qry); 
        $stmt->execute($params);

Ich sehe hier keinen Fehler.
 
Verwendest du $params früher schon mal mit einem anderen key als ':b_b_id'?

PHP:
$params[':id'] = 1;
.....
$params[':b_b_id'] = $row['b_b_id'];

Wenn ja, dann hast du mehr als einen Eintrag im $params.

Lass dir mal mit var_dump($params) ausgeben was du da wirklich drin hast.
Ansonsten halt den Array vorher zurücksetzen:
PHP:
// So bist du sicher dass keine Altlasten vorhanden sind
$params = array(':b_b_id' => $row['b_b_id']);
 
Zuletzt bearbeitet:
Nein, $params hat wirklich nur das beinhaltet. Keine Ahnung warum aber Heute funktionierts wieder.

Wirklich ganz komisch. Wäre interessant, woran das gelegen hat.

Trotzdem Danke Yaslaw
 
Zurück