6

认为这是一个非常简单的查询:

$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) "riskassessment"

4

2 回答 2

4

在@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);

希望这对那些仍然喜欢编写程序代码的人有用。

于 2013-10-29T08:12:16.510 回答
0

这是一个 PHP 内存错误:“致命错误”这实际上与 mysql 无关,因为 mysql 会产生不同的错误。问题是,PHPMyAdmin 运行在一个 cPanel 后端,它有一个单独的 PHP 和 Apache 安装,所以资源限制设置得更高。您的 PHP 脚本在一个单独的 php 环境中运行,具有较低的规格。我会与您的主机一起提高您的 PHP 内存限制阈值,或查看下面的链接。

提高内存限制

于 2013-10-28T18:14:38.813 回答