Portal > Foren > PHP > PHP-Programmierung > Probleme mit Platzhaltern bei mysqli prepare und execute
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 03.04.2008, 01:52 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 03.04.2008
Ort: Paderborn
Beiträge: 7
Standard Probleme mit Platzhaltern bei mysqli prepare und execute

Hallo zusammen!

Nachdem ich jetzt schon zwei Stunden an diesem Fehler zu knabbern habe dachte ich mir, ich frag hier mal nach.

PHP-Code:
<?
$db = new MySQLi('localhost','...','...','...');
$spalte1 = 8;
$spalte2 = 1;
$stmt = $db->prepare("SELECT * FROM tabelle WHERE spalte1 = ? AND spalte2 = ?");
$stmt->bind_param("ii",$spalte1,$spalte2);
?>
Habe das Script schon aufs übelste zusammengestrichen, ursprünglich war das teil von etwas grösserem. Der Fehler ist aber immer noch da:

Warning: mysqli_stmt::bind_param() [function.mysqli-stmt-bind-param]: Number of variables doesn't match number of parameters in prepared statement in /pfad/ist/egal/index.php on line 6

Habe jetzt schon alles mögliche ausprobiert und verstehe immer noch nicht, wieso dem so ist.

PHP-Code:
$stmt $db->stmt_init();
$stmt->prepare("SELECT * FROM tabelle WHERE spalte1 = ? AND spalte2 = ?"); 
an Stelle von Zeile 5 oben geht z.B. ebensowenig, bricht mit gleichem Fehler ab, dann allerdings eine Zeile weiter (logisch).

Geändert von b0mbe (03.04.2008 um 01:56 Uhr)
b0mbe ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 02:12 Nach oben    #2
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Ich kann nur raten, aber das sieht ganz ähnlich aus wie eine mir bekannten MySQL-Klasse aus, daher:

PHP-Code:
$stmt->bind_param("ii",$spalte1,$spalte2); 
Blub?
Du hast doch nur zwei Binds in deinem Query.
Daher würde ich mal das "ii" vorne weg machen.

//edit: Sieht nach Schlossnagle aus, aber ich denk das Entwurfsmodell ist weit verbreitet. Nutze es ja selbst auch...
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 11:53 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 03.04.2008
Ort: Paderborn
Beiträge: 7
Standard

Keine Ahnung ob MySQLi eine "dir bekannte MySQL-Klasse" ist... Auf jedenfall ists eine PHP5-Extension.

Die 3 Parameter sind schon so in Ordnung, der erste ist der types-string, in diesem Fall zwei i für zwei Integer-Werte. Siehe auch:

http://de.php.net/manual/de/function...bind-param.php

Von Schlossnagle und seinem Entwurfsmodell hab ich noch nie was gehört
b0mbe ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 16:41 Nach oben    #4
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Sorry, habs verplant. Ich dachte nur wegen
PHP-Code:
new MySQLi 
Das kam mir unbekannt vor (mit Großbuchstaben).

Ich habe das mal nachgeprüft, ich hab damit keinerlei Probleme mit dieser Art von Statement.
Ist die Klasse MySQLi ein von dir selbstgeschriebener Wrapper für mysqli?

Wenn ja, hast du vielleicht etwas an der bind_param-Methode geändert?
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 17:21 Nach oben    #5
Neuer Benutzer
 
Registriert seit: 03.04.2008
Ort: Paderborn
Beiträge: 7
Standard

Nein, MySQLi ist einfach mysqli. Kein Wrapper, kein garnix. Den gleichen Fehler in den gleichen Zeilen gibts auch bei Schreibweise "new mysqli" statt "new MySQLi". Kann das irgendwas mit der PHP-Installation zu tun haben? Prepared Statements mit einem Platzhalter funktionieren einwandfrei, sobald ein zweiter oder mehr dazukommen gehen sie nicht mehr.
b0mbe ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 21:29 Nach oben    #6
Johannes Schlichenmaier
 
Benutzerbild von Jojo
 
Registriert seit: 26.08.2005
Ort: Mannheim
Beiträge: 403
Standard

Hmm... dann kann ich dir auch nicht weiterhelfen.
Zum einen, weil ich noch kaum mit der mysqli-Erweiterung gearbeitet habe und zum zweiten, weil es - wie gesagt - bei mir klappt.

In den Comments kann ich auch nichts erkennen.
Hast du vielleicht eine verbugte oder/und alte Version?
__________________
In the beginning was the word
and the word was content-type: plain/text

heute code ich, morgen debug ich und uebermorgen cast ich die koenigin auf int
Jojo ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.04.2008, 22:03 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 03.04.2008
Ort: Paderborn
Beiträge: 7
Standard

Hab mich auch noch in 'nem anderen Forum erkundigt und wurde auf
http://bugs.php.net/31037
verwiesen. Nur für die, die es interessiert.

Bei dem dort angebotenen Testskript funktionierts bei mir noch einwandfrei (nur ein Platzhalter). Sobald ich das aber um einen zweiten Platzhalter erweitere, hauts mir wieder den Fehler um die Ohren. In obigem Thread hat noch einer das gleiche Problem wie ich, bei dem mysqli->client_version ebenso wie bei mir im Gegensatz zu mysqli->server_version veraltet scheint. Also werde ich mal sehen, ob mir das mein Hoster updaten kann und das Problem dann evtl behoben ist...
b0mbe ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45