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 に答える