Mysqli_stmt_bind_param causes a fatal error: memory size is exhausted

I thought this was a fairly simple request:

$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 differently. When I launched the request, I received 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 string. If I leave this line and edit the SELECT to use the $qstring string variable directly, I don't get any results displayed on the screen (in fact, I get NOTHING shown on the screen, not even echo !)

This is not a particularly large table (less than 300 rows), and this query should return 10 rows or so (and the SELECT works fine in phpmyadmin , the expected results are returned)

What am I doing wrong?


Edit:

I already checked to ensure that $ qstring is actually a string: here is the result of var_dump : string (14) "riskassessment"

+6
source share
2 answers

Using @andrewsi:

mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow); rows mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow); and mysqli_stmt_store_result($stmt); so that the code snippet 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); 

I hope this will be useful to those who still want to write procedural code.

+4
source

This is a PHP memory error: "Fatal error", it really has nothing to do with mysql, since mysql generates another error. The problem is that PHPMyAdmin runs on cPanel, which has a separate installation of PHP and Apache, so the resource limits are set higher. Your PHP Script runs in a separate php environment with lower specifications. I would ask your host to raise your PHP memory limit threshold or see the link below.

Increase memory limit

0
source

Source: https://habr.com/ru/post/956891/


All Articles