我认为这是一个非常简单的查询:
$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);
然而,php似乎不这么认为。运行查询时,出现以下错误:
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
使用mysql_stmt_bind_param
线时。如果我省略该行并调整 SELECT
语句以直接使用字符串变量$qstring
,我不会在屏幕上显示任何结果(实际上,屏幕上没有显示任何内容,甚至没有显示echo
!
这不是一个特别大的表(少于 300 行),此查询应返回 10 行左右(并且 SELECT
语句在 phpmyadmin
中工作正常,返回预期结果)
我做错了什么?
编辑:
我已经检查过以确保$qstring实际上是一个字符串:这是var_dump
的结果:string(14) "风险评估"
在@andrewsi的帮助下:
交换mysqli_stmt_bind_result($stmt,$taglink,$tagtitle,$tagshow);
行和mysqli_stmt_store_result($stmt);
行的顺序,以便代码片段现在为:
$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);
希望这对那些仍然喜欢编写过程代码的人有用。
这是一个
PHP内存错误:"致命错误" 这实际上与MySQL无关,因为MySQL会产生不同的错误。问题是,PHPMyAdmin运行在cPanel后端,该后端单独安装了PHP和Apache,因此资源限制设置得更高。您的 PHP 脚本在具有较低规格的单独 PHP 环境中运行。我会和你的主机一起提高你的PHP内存限制阈值,或者看到下面的链接。
提高内存限制