SQLSTATE[HY093]: Invalid parameter number: keine Parameter gebunden waren, aber die Parameter sind

Baue ich ein Datenbank-Objekt, dass sich der PDO Objekt mit der PDOStatement - Objekt, um für die Verkettung zur Verfügung stehen. Im Grunde habe ich einfach nur die Methoden, die ich am häufigsten verwenden, aber bindParam gibt mir eine harte Zeit.

private $stmt = null;

...

public function prepare($statement,array $driver_options = array()) {
    if($this->stmt) throw new \Exception('PDO Statement already prepared, no override!');
    $this->stmt = parent::prepare($statement, $driver_options);
    return $this;
}

public function bindParam($place, &$val, $dataType){
    if(!$this->stmt) throw new \Exception('PDO Statement is empty');
    $this->stmt->bindParam($place, $val, $dataType);
    return $this;
}

public function execute(array $params = array()){
    if(!$this->stmt) throw new \Exception('PDO Statement is empty');
    $this->stmt->execute($params);
    return $this;
}

public function fetchAll($pdoFetchType){
    if(!$this->stmt) throw new \Exception('PDO Statement is empty');
    return $this->stmt->fetchAll($pdoFetchType);
}

...

public function getStmt(){
    return $this->stmt;
}

public function clearStmt(){
    $this->stmt = null;
}

Bekomme ich die Fehlermeldung aus dem Titel, in diesem code:

$i = 0;
$db->prepare('SELECT * FROM users LIMIT ?,1')->bindParam(1, $i, \PDO::PARAM_INT);
while($row = $db->execute()->fetchAll(\PDO::FETCH_ASSOC)){
    echo "<pre>".print_r($row, true)."</pre>";
    $i++;
}

Im Grunde, was ich herausgefunden habe über diesen Fehler ist, dass es tritt auf, wenn Variablen in bindParam sind null, aber $i ist eindeutig nicht null. Können Sie mir helfen?

BEARBEITEN: Auch

var_dump($this->stmt->bindParam($place, $val, $dataType));

in der bindParam Methode gibt TRUE. Aus dem Handbuch:

Rückgabewerte

Gibt bei Erfolg TRUE zurück, im Fehlerfall FALSE.

Es gelingt aber nicht verbindlich den parameter ??? Ich habe das Gefühl mein Gehirn würde explodieren bald.

Was passiert, wenn man var_dump($val) innerhalb der definierten bindParam()? Und wenn du var_dump($this->stmt)?
int(0) object(PDOStatement)#6 (1) { ["queryString"]=> string(29) "SELECT * FROM users LIMIT ?,1" } Ich hasse es wirklich, wenn php bedeutet das für mich..
Ich bin mir langsam die Ideen aus, versuchen bindValue() statt bindParam() Innenseite Ihrer Funktion public function bindParam um zu sehen, ob sich etwas ändert. Von der doc, im Gegensatz zu PDOStatement::bindValue(), die variable gebunden ist, als Referenz und wird nur ausgewertet werden, zu der Zeit, PDOStatement::execute() aufgerufen wird. aber ich bin mir nicht sicher, ob es würde nichts ändern.
auch die Fehlermeldung blieb die gleiche, zumindest das könnte sich geändert haben.. Q_Q
Der debugger ist dein Freund.

InformationsquelleAutor php_nub_qq | 2013-12-07

Schreibe einen Kommentar