1

このプログラムは、スポーツ、映画などの興味のあるカテゴリであるユーザーから変数 $ask を取得します。次に、そのカテゴリが存在するかどうかをデータベースにチェックし、存在しない場合はデータベースに追加します。データベース メモリ、テーブル - 'interestcategories' には、現時点では IID、カテゴリ、およびコメントの 3 つの列しかありません。データベースへの追加は機能しますが、データベースにある場合、そこにあるものを印刷することはできません....

問題は主に次の行にあります。

   while ($row = mysqli_fetch_assoc($result)) {
    printf ("%s (%s)\n", $row["Category"], $row["Comment"]);
   }
   /* free result set */
   mysqli_free_result($result);

画面には何も表示されず、エラー メッセージも表示されません。カテゴリはテーブルに 1 回しか表示されないため、印刷されるのは 1 行だけです。何か案は?

  <?php
  error_reporting(E_ALL);
  $link = mysqli_connect("localhost", "root", "", "memory");
  /* check connection */
  if (mysqli_connect_errno()) {
  printf("Connect failed: %s\n", mysqli_connect_error());
  exit();
  }

function notAnInterest($ask, $link)
{
$query2 = "INSERT into interestcategories (Category, Comment)
        VALUES ('$ask', 'Added by user') ";

$result2 = mysqli_query($link, $query2);
echo "<pre>Debug: $query2</pre>\n";
if ( false===$result2 ) {
  printf("error: %s\n", mysqli_error($link)); 
  }
 echo 'added ' . $ask; 
 }

 if(isset($_POST['ask']) === true && empty($_POST['ask']) === false) {
 $ask = trim($_POST['ask']);
$query = "
SELECT  *
FROM    `interestcategories`
WHERE `interestcategories`.`Category` = '$ask' ";

if ($result = mysqli_query($link, $query)) {
if(($row = mysqli_fetch_assoc($result)) === null) {
notAnInterest($ask, $link);
}
 /* fetch associative array */
    printf('here1');
 while ($row = mysqli_fetch_assoc($result)) {
    printf('here2');
  //printf ("%s (%s)\n", $row["Category"], $row["Comment"]);
}

 /* free result set */
 mysqli_free_result($result);
}

}

 /* close connection */
  mysqli_close($link);

  ?>
4

1 に答える 1

0

変化する:

if ($result = mysqli_query($link, $query)) 
{
    if (($row = mysqli_fetch_assoc($result)) === null) 
    {
        notAnInterest($ask, $link);
    }

    /* fetch associative array */
    while ($row = mysqli_fetch_assoc($result)) 
    {
        printf ("%s (%s)\n", $row['Category'], $row['Comment']);
    }

    /* free result set */
    mysqli_free_result($result);
}

に:

if ($result = mysqli_query($link, $query)) 
{
    if (0 == mysqli_num_rows($result)) 
    {
        notAnInterest($ask, $link);
    }
    else
    {
        /* fetch associative array */
        while ($row = mysqli_fetch_assoc($result)) 
        {
            printf ("%s (%s)\n", $row['Category'], $row['Comment']);
        }
    }

    /* free result set */
    mysqli_free_result($result);
}
于 2013-01-06T04:06:57.663 に答える