I thought this was a quite simple query:
$qry="SELECT taglink, tagtitle, tagshow FROM taglist_main WHERE tag = ?";
if ($stmt = mysqli_prepare($link,$qry)) {
mysqli_stmt_bind_param($stmt,"s",$qstring);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);
mysqli_stmt_store_result($stmt);
echo "<p><strong>".mysqli_stmt_num_rows($stmt)."</strong> entries found, shown below.</p>";
while (mysqli_stmt_fetch($stmt)) {
echo "<li><a href=\"/$taguri\" title=\"$tagtitle\">$tagshow</a></li>";
}
mysqli_stmt_close($stmt);
However, php seems to think otherwise. When running the query, I got the following error:
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4294967296 bytes) in /home/envoyenv/public_html/envoytest/tags/index.php on line 110
when using the mysql_stmt_bind_param
line. If I leave that line out and adjust the SELECT
statement to use the string variable $qstring
directly, I get no results shown on screen (actually, I get NOTHING shown on screen, not even the echo
!)
This isn't a particularly large table (less than 300 rows) and this query should return 10 rows or so (and the SELECT
statement works fine in phpmyadmin
, the expected results are returned)
What am I doing wrong?
Edit:
I'd already checked to ensure $qstring was actually a string: here's the result of var_dump
: string(14) "riskassessment"
With help from @andrewsi:
Swap the order of the mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);
and mysqli_stmt_store_result($stmt);
lines so the code fragment now reads:
$qry="SELECT taglink, tagtitle, tagshow FROM taglist_main WHERE tag = ?";
if ($stmt = mysqli_prepare($link,$qry)) {
mysqli_stmt_bind_param($stmt,"s",$qstring);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);
echo "<p><strong>".mysqli_stmt_num_rows($stmt)."</strong> entries found, shown below.</p>";
while (mysqli_stmt_fetch($stmt)) {
echo "<li><a href=\"/$taguri\" title=\"$tagtitle\">$tagshow</a></li>";
}
mysqli_stmt_close($stmt);
Hopefully this will be useful for those who still like to write procedural code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With