phpbar.de logo

Mailinglisten-Archive

[php] Problem mysqli_prepare und mysqli_stmt_bind_param

[php] Problem mysqli_prepare und mysqli_stmt_bind_param

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Jun 6 09:58:46 CEST 2006


Guten Morgen! :-)

Endlich habe ich mich durchgerungen, meine Website von Grund auf neu zu
programmieren. Gerade bin ich dabei, die Klasse mit den
Datenbankfunktionen auf der Basis der MySQLi-Erweiterung zu bauen.

Dabei ist nun folgendes Problem aufgetreten:

Wenn ich auf meinem lokalen Entwicklungsserver versuche, einem Prepared
Statement (mysqli_prepare) mit mysqli_stmt_bind_param Parameter
zuzuweisen, bekomme ich ein leeres Ergebnis. Führe ich das Prepared
Statement ohne Parameter aus, kriege ich alle Datensätze aus der
Datenbank.

Jetzt habe ich das Skript auf dem Live-Server ausprobiert. Dort tritt das
Problem nicht auf. Die Prepared Statements funktionieren auch mit
Parametern.

(Detaildaten zu den beiden Server ganz am Ende dieser Mail!)

Möglicher Hintergrund:

Ich hatte einmal ein ähnliches Problem im März, als ich mit Hibernate
(Java) experimentiert habe. Da war es allerdings so, daß SELECTs wunderbar
funktioniert haben, INSERTS aber nur fehlerhaft.

Nach fast einer ganzen Woche Recherche im Internet war ich damals darauf
gestoßen, daß es einen Bug im MySQL-Server-RPM von Mandriva 2006, der vom
mir lokal verwendeten Linux-Version, gibt (vgl.
http://bugs.mysql.com/bug.php?id=14910).

Die Lösung war, der Datenbankverbindung über J/Conenctor in Hibernate
folgendes mitzugeben:
<property name="connection.useServerPrepStmts">false</property>

Meine Frage ist nun:

Wie kann ich der Verbindung diese Option mitgeben, um zu testen, ob es
wieder daran liegt? Mit mysqli_options scheint es nicht zu gehen? Wie
müßte denn der Connection-String für mysqli_connect / mysqli_real_connect
aussehen, wen ich TCP/IP verwenden würde, um den Parameter
useServerPrepStmts mitgeben zu können? Ich habe leider kein Beispiel
gefunden, wie von diesen Funktionen in diesem speziellen Fall die Übergabe
erwartet wird.

Was mich noch interessieren würde:

1. Wie kann ich mir eigentlich das fertig zusammengebaute SQL-Statement (=
mit eingesetzten Parametern) sehen? Komme ich da überhaupt von PHP aus
dran? Oder habe ich eine Chance, die Daten auf MySQL-Seite abzugreifen?

2. Ich suche bisher verzweifelt bei mysqli sowas wie "is_connected". Wie
komme ich an diese Information, ob das mysqli-Objekt auch eine gültige
Verbindung hält?


Viele Grüße
Lutz



Hier dann noch die Angaben zu den Servern:


LOKAL

PHP 5.1.4 als Modul

MySQL - 4.1.12

* Protokoll-Version: 10
* Server: Localhost via UNIX socket
* MySQL Client-Version: 5.0.21
* Verwendete php Erweiterungen: mysqli

character_set_client (utf8)
character_set_connection (utf8)
character_set_database (utf8)
character_set_results (utf8)
character_set_server (latin1)
character_set_system (utf8)
character_sets_dir (/usr/share/mysql/charsets/)


ONLINE

PHP 5.1.4 als CGI

MySQL - 4.1.14-log

* Protokoll-Version: 10
* Server: Localhost via UNIX socket
* MySQL Client-Version: 4.1.14
* Verwendete php Erweiterungen: mysqli

character_set_client (utf8)
character_set_connection (utf8)
character_set_database (utf8)
character_set_results (utf8)
character_set_server (latin1)
character_set_system (utf8)
character_sets_dir (/usr/share/mysql/charsets/)


php::bar PHP Wiki   -   Listenarchive