Ik zit voor een programmeerding te spelen met een antieke PHP5.5 installatie waar ik een basale query niet op werkend krijg.
De oude code is zoiets als dit:
Deze code werkt maar is natuurlijk zo lek als een mandje. ik zie dat de code werkt.
Nu wil ik dus omkatten naar een mysqli interface met een prepared statement. Ik kan hierbij niet de PHP-versie veranderen (oude challenge) en zou normaal dat als eerste fixen.
Ik heb nu zoiets als dit gemaakt:
Gezien de code in snippet1 werkt zou de code in snippet2 ook moeten werken. Niet dus.
Nu heb ik wat zitten debuggen en gekeken naar:
store_results(), dit zou niet nodig moeten zijn en lost het ook niet op
stmt->num_row is sowieso 0 bij mijn code.
Ik verdacht bind_param ervan om niet lekker om te gaan met 2x dezelfde parameter gezien deze by reference wordt doorgegeven.
Dus ik heb zoiets gedaan als $p1= $parameter; $p2 = parameter; $stmt->bind_param("ss",$p1,$p2);
Ik kom er echter niet uit. In een normale situatie zou ik niet met bind_result werken.. maarja. Wie wil me een zet de goede kant op geven?
De oude code is zoiets als dit:
PHP:
1
2
3
4
5
6
| $result = $sql->query("SELECT naam FROM persons WHERE voornaam like '%$parameter%' OR achternaam like '%$parameter%'"); print "<ul>"; while($res = $result->fetch_array(MYSQLI_ASSOC)) { print "<li>" . $res['naam'] . "</li>"; } print "</ul>"; |
Deze code werkt maar is natuurlijk zo lek als een mandje. ik zie dat de code werkt.
Nu wil ik dus omkatten naar een mysqli interface met een prepared statement. Ik kan hierbij niet de PHP-versie veranderen (oude challenge) en zou normaal dat als eerste fixen.
Ik heb nu zoiets als dit gemaakt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
| $parameter = "foo"; $sql = new mysqli("localhost", "X", "Y", "Z"); $stmt = $sql->prepare("SELECT naam FROM persons WHERE voornaam LIKE ? OR achternaam LIKE ?"); $stmt->bind_param("ss",$parameter,$parameter); $stmt->execute(); print "<ul>"; $stmt->bind_result($naam); while($stmt->fetch()) { print "<li>" . $naam . "</li>"; } print "</ul>"; |
Gezien de code in snippet1 werkt zou de code in snippet2 ook moeten werken. Niet dus.
Nu heb ik wat zitten debuggen en gekeken naar:
store_results(), dit zou niet nodig moeten zijn en lost het ook niet op
stmt->num_row is sowieso 0 bij mijn code.
Ik verdacht bind_param ervan om niet lekker om te gaan met 2x dezelfde parameter gezien deze by reference wordt doorgegeven.
Dus ik heb zoiets gedaan als $p1= $parameter; $p2 = parameter; $stmt->bind_param("ss",$p1,$p2);
Ik kom er echter niet uit. In een normale situatie zou ik niet met bind_result werken.. maarja. Wie wil me een zet de goede kant op geven?