Hallo!
Bei meinem Unterfangen, meine angestaubten PHP-Klassen etwas zu erneuern (Umstellung auf 5.2 +, Nutzung der MySQL Improved Extension etc.) bin ich auf folgendes gestoßen:
/* prep. stmt. Versuch*/
$ob = new StdClass();
$mysqli = new Mysqli('localhost', 'root', '#+#', 'koch');
$stmt = $mysqli->prepare('SELECT ingredients FROM content WHERE id=?');
$id = 92;
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($ob->ingredients);
$stmt->fetch();
var_dump($ob->ingredients);
/* direkte query */
$id = 92;
$mysqli = new Mysqli('localhost', 'root', '#+#', 'koch');
$result = $mysqli->query('SELECT ingredients FROM content WHERE id='.$id);
$ob = $result->fetch_object();
var_dump($ob->ingredients);
Beide Queries greifen auf das Attribut ingredients des Datensatzes mit ID=92 der Entity koch.content zu.
Die Abfragen wurden (mehrfach versucht) direkt nacheinander ausgeführt. Ich nutze die DB alleine und es wurden keinerlei Änderungen hieran vorgennommen, dennoch sind die Ergebnisse (Ausgaben von var_dump() hier gekürzt wegen der Länge) unterschiedlich:
Im 1. Fall:
string(256) "Lorem ipsum dolor sit amet, con ..."
Im 2. Fall:
string(3023) "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod..."
Dieses Verhalten ist mit anderen Datensätzen und -feldern reproduzierbar und wurde mit verschiedenen Datentypen für das auszulesende Attribut (text, blog und long* etc.) getestet.
Variante 1 mit dem prepared Statement gibt mir immer nur maximal 256 Bytes zurück.
Warum? Was übersehe ich dabei?
Nur der Vollständigkeit halber: greife ich mit anderen Clients auf den jeweiligen Datensatz zu bekomme ich (natürlich) im obigen Beispiel den 3023 Bytes langen String geliefert.
Vielen Dank für Eure Tipps!
Ciao
GG
"If I do not seek to understand what is happening here
- then I've got peanuts in my head!"
(I. Hosein)