SQLSTATE [HY093]: Numéro de paramètre invalide: aucun paramètre n'a été lié, mais les paramètres sont fournis
Je suis en train de construire un objet de base de données qui rejoint la PDO
objet avec le PDOStatement
objet dans l'ordre de l'enchaînement d'être disponible. Fondamentalement, j'ai juste mis les méthodes que j'utilisent plus fréquemment, mais bindParam
est de me donner un moment difficile.
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;
}
J'obtiens l'erreur, dans le titre, dans ce 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++;
}
Fondamentalement, ce que j'ai trouvé à propos de cette erreur, c'est qu'il se produit lorsque les variables fournies dans bindParam
sont null
mais $i
est clairement pas la valeur null. Pouvez-vous m'aider?
MODIFIER: Également en cours d'exécution
var_dump($this->stmt->bindParam($place, $val, $dataType));
dans le bindParam
méthode renvoie TRUE
. À partir de la notice:
Valeurs De Retour
Retourne TRUE en cas de succès ou FALSE en cas d'échec.
C'est de réussir, mais ne lie pas le paramètre ??? Je sens que mon cerveau va exploser bientôt.
source d'informationauteur php_nub_qq
Vous devez vous connecter pour publier un commentaire.
Je suppose que l'aide d'une référence
&$val
au lieu d'une valeur$val
est ce qui cause le problème.S'il vous plaît essayez ce code à la place:
MODIFIER
Ma réponse ci-dessus est faux.
Essayer de modifier le
execute
méthode:En passant un tableau vide en tant que paramètre à la
execute
méthode permet de supprimer toutes les anciennes liaisons. C'est pourquoibindParam
renvoyé true (lié avec succès), mais le "non params ont été tenus" d'erreur est apparu dès que vous avez appeléexecute
.Eu la même erreur, mais à cause différente
Ma demande avait des observations, dont l'une merde point d'interrogation.
Pour les AOP, un "
?
" est, bien sûr, un paramètre à lier.Ma demande n'avait pas de problème nulle part ailleurs, et je n'avais aucune idée de l'endroit où AOP serait d'inventer un "paramètre" alors que je n'étais pas à l'aide de tout, depuis j'ai toujours utiliser des marqueurs nommés, comme
:value
Passé plus d'une heure sur ce point 🙁
Mai de cette réponse aider certaines personnes à avoir cette bêtement question triviale.