Volledige versie bekijken : PHP en MySQLi probleem met strings



ultddave
23 April 2010, 01:10
Hey,

Ik probeer een aantal strings uit mijn MySQL database te halen via PHP.



$stmt = $mysqli->prepare("SELECT * FROM entries")) {

/* Query uitvoeren */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($id, $title, $body);

/* fetch value */
$stmt->fetch();

}
echo $id;
echo $title;
echo $body;


(De variabele $mysqli bevat een werkende connectie).

De 3 echo statements onderaan generen dan enkel output voor $id en $title. En niet voor $body. Na wat zoekwerk blijkt dat strings met kleiner en groter dan tekens (< en >) wel in de database worden gezet. (Kan ik zien via PHPMyAdmin).

Maar mysqli heeft blijkbaar problemen om strings met die tekens terug op te vragen.

Ik heb het getest door een titel te gebruiken genaamd "test". Dan printte de "echo $title;" de titel uit. Toen ik in PHPMyAdmin de waarde "test" in de database veranderde naar "<test". printte de echo statements op de webpagina niets meer uit voor de titel.

Enig idee hoe ik wel strings met die tekens kan opvragen uit de database? :P

PS: Mijn body bevat altijd HTML code. Vandaar het probleem.

Mvg,
Dave

ultddave
23 April 2010, 17:12
Voorlopig opgelost door gewone mysql ipv mysqli te gebruiken. Als er iemand nog een oplossing weet, mag je het altijd laten weten.

Mvg,
Dave

ultddave
24 April 2010, 13:35
Toch nog even vermelden. De haakjes in mijn eerste post, komen van een if else test, die ik had weggelaten.


if($stmt = $mysqli->prepare("SELECT * FROM entries")) {

/* Query uitvoeren */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($id, $title, $body);

/* fetch value */
$stmt->fetch();

}
echo $id;
echo $title;
echo $body;

Dus het probleem ligt niet bij de verkeerd gesloten haakjes of iets dergelijks. ;) PHP geeft geen syntax fouten aan. ;)

Mvg,
Dave

ultddave
24 April 2010, 19:13
Fout gevonden. Mag gesloten worden.

$mysqli->prepare() zorgt ervoor dat alle data verzonden naar/ontvangen van de database gechecked wordt op injection.

Om dat te vermijden moet ge bij zulke SELECT statements, de gewone query functie gebruiken ipv de prepare functie.
$mysqli->query()

Die geeft wel alle data goed terug.

Achteraf gezien wel een domme fout :D.

Mvg,
Dave