Die Anzahl der Variablen stimmt nicht mit der Anzahl der Parameter

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Loddar1

Erfahrenes Mitglied
Warnung: mysqli_stmt::bind_param():
Die Anzahl der Variablen stimmt nicht mit der Anzahl der Parameter
in der vorbereiteten Anweisung unter phpseite on line 70 überein.

Ich kann keinen Fehler entdecken, kann mir einer den Fehler sagen oder beschreiben?

PHP:
68. $sql = "SELECT id,name,text FROM tabelle WHERE ocat='0' AND block='0'";
69. $stmt = $mysqli->prepare($sql);
70. $stmt->bind_param('iss',$id,$name,$text);
71. $stmt->execute();
72. $result = $stmt->get_result();
73. while ($ol = $result->fetch_assoc()) {

Das Script funktioniert und zeigt auch alles richtig an,
nur die Meldung sagt das da ein Fehler ist den ich nicht sehe.

Besten Dank im vorraus Loddar1
 

Yaslaw

n/a
Moderator
Du bindest 3 Variablen ein. Im SQL ist aber keine definiert. DOrt sind alles Festwerte.
Wenn du die Ausgabe in die Variablen setzen willst, dann verwende doch $stmt->bind_result()
 

Loddar1

Erfahrenes Mitglied
Ok Yaslaw ich habe jetzt einfach die Zeile 70 gelöscht.
Neuer Code:
PHP:
68. $sql = "SELECT id,name,text FROM tabelle WHERE ocat='0' AND block='0'";
69. $stmt = $mysqli->prepare($sql);
70. $stmt->execute();
71. $result = $stmt->get_result();
72. while ($ol = $result->fetch_assoc()) {
es funktioniert und die Meldung ist weg.
Wenn das in Ordnung ist, ist es gelöst!

Nochmals Danke
 

EuroCent

Klappstuhl 2.0
Ok Yaslaw ich habe jetzt einfach die Zeile 70 gelöscht.
Neuer Code:
PHP:
68. $sql = "SELECT id,name,text FROM tabelle WHERE ocat='0' AND block='0'";
69. $stmt = $mysqli->prepare($sql);
70. $stmt->execute();
71. $result = $stmt->get_result();
72. while ($ol = $result->fetch_assoc()) {
es funktioniert und die Meldung ist weg.
Wenn das in Ordnung ist, ist es gelöst!

Nochmals Danke
Ich glaube nicht dass das @Yaslaw genauso meinte.

Er meinte eher dass Du die Variablen Werte in die SQL packen solltest.

Beispielsweise: SELECT id,name,text FROM tabelle WHERE ocat=? AND block=?
$stmt->bind_param('ii',$id,$wert1,$wert2);
 

Loddar1

Erfahrenes Mitglied
OK, habe es jetzt so geändert:
PHP:
$stmt = $mysqli->prepare("SELECT id,name,text FROM tabelle WHERE ocat=? AND block=?");
$stmt->bind_param("ii", $ocat,$block);
$stmt->execute();
$result = $stmt->get_result();
while ($ol = $result->fetch_assoc()) {
es funktioniert, wäre es denn so auch ok?
 

EuroCent

Klappstuhl 2.0
OK, habe es jetzt so geändert:
PHP:
$stmt = $mysqli->prepare("SELECT id,name,text FROM tabelle WHERE ocat=? AND block=?");
$stmt->bind_param("ii", $ocat,$block);
$stmt->execute();
$result = $stmt->get_result();
while ($ol = $result->fetch_assoc()) {
es funktioniert, wäre es denn so auch ok?
Ja das sollte so passen :)

Du kannst aber auch statt ? zum Beispiel:
PHP:
$stmt = $mysqli->prepare("SELECT id,name,text FROM tabelle WHERE ocat=:ocat AND block=:block");
$stmt->bind_param(":ocat", $ocat, PDO::PARAM_INT));
$stmt->bind_param(":block", $block, PDO::PARAM_STR));
$stmt->execute();
$result = $stmt->get_result();
while ($ol = $result->fetch_assoc()) {

Belese Dich mal zusätzlich noch hier: PHP: PDOStatement::bindParam - Manual
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…