0

試しましたが、うまくいきません。何も返されないときに「結果が見つかりませんでした」などのメッセージを表示するにはどうすればよいですか?

私のPHPスクリプトは次のとおりです。

<?php
$pnam=$_POST["prodnam"];
if($pnam=="")
{
  echo("Please enter a search…");
  return;
}

include("connection.php");

$SQL="SELECT * FROM results WHERE prodnam='".$pnam."'";
$run=mySQL_query($SQL,$con) or die ("SQL query error"); 
$rec=mysql_fetch_array($run);

echo ("<table align='center' style='
  font-family: Arial, Helvetica, sans-serif;
  color:#ffffff;
  font-size: 15px;
  text-align:center;'>");
echo ("<tr>");
echo ("<td>".$rec["dtlsnam"]."</td>");
echo ("</tr>");
echo ("</table>");
?>
4

5 に答える 5

1

PDOorを使用する明白なステートメントを述べる以外に、mysqli必要な関数は次のとおりです: mysql_num_rows()

したがって、次のように確認してください。

if( mysql_num_rows($run) == 0 ) exit( "No results" );
于 2013-01-15T04:17:10.377 に答える
0

次のコードを使用して、クエリによってレコードがフェッチされたかどうかを確認します。

$rec=mysql_fetch_array($run);
if(mysql_num_rows($run)>0)
{

// messaege here

}

また、次のコードを使用して SQL インジェクションのリスクを軽減します

$pnam = stripslashes($pnam);
于 2013-01-15T04:17:33.277 に答える
0

mysql_num_rowsクエリが返す行数を確認し、それに応じて状況を処理するために使用します。

 $run=mySQL_query($SQL,$con) or die ("SQL query error");
 if(mysql_num_rows($run)>0) { 
        $rec=mysql_fetch_array($run);



        echo ("<table align='center' style='
            font-family: Arial, Helvetica, sans-serif;color:#ffffff;
            font-size: 15px;
            text-align:center;'>");
        echo ("<tr>");
        echo ("<td>".$rec["dtlsnam"]."</td>");
        echo ("</tr>");
        echo ("</table>");
}
else
{
    echo 'no rows present';
}
于 2013-01-15T04:17:44.793 に答える
0

mysql_num_rows() を使用して、返されたレコード数を取得できます。

<?php

$num_rows = mysql_num_rows($run);

if($num_rows==0)
{
  echo 'No records found';
}
else
{
 $rec=mysql_fetch_array($run);

  echo ("<table align='center' style='
                font-family: Arial, Helvetica, sans-serif;color:#ffffff;
                font-size: 15px;
                text-align:center;'>");
            echo ("<tr>");
            echo ("<td>".$rec["dtlsnam"]."</td>");
            echo ("</tr>");
            echo ("</table>");

}

?>
于 2013-01-15T04:18:35.317 に答える
0

クエリも mysql_ から PDO に切り替えています。変更するように言うだけでなく、PDO で正しく設定できるように最善を尽くします...失敗しても、何かを学ぶことができます。うまくいけば、それを利用して構築し、私がクエリを改善し続けるにつれて、あなたがしていることを改善できることを願っています. 小さなアプリを 1 つだけアップグレードして、いくつかの大きなアプリをアップグレードする必要があります。まだ学習段階です。

正直なところ、スタック オーバーフローが常に発生していなければ、アップグレードすることはありませんでした。mysql_connect を使用するすべての人は、それにぶつかります。小さなプログラマーの箱から出して気づかせてくれました。みんなありがとう!

OK、私はこれを台無しにしようとしているので、笑わないでください。

PS質問で誰もテーブルについて言及していないとは信じられません。同じ名前の製品が複数ある場合はどうなりますか?

$stmt=$con->prepare("SELECT * FROM results WHERE prodnam=:pnam");  // named variables in prepared
$stmt->bindValue(':pnam', $pnam, PDO::PARAM_STR);  // bind it to the variable
$stmt->execute();
$hit = $stmt->rowCount();  // count them rows

if($hit) {
   while($results = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
      echo $results['dtlsnam'];
      /* I ignored the fact you are using tables because maybe it is a good tabular layout 
* you are planning.  You can figure out the table part.  But best to loop and put the table
*start before the loop and the table end after the loop and just loop the rows.
*/
   }
}

//
// Then in your connection include you want something like this.
//
// put in the values for your variables.
<?php
try {
$con = new PDO("mysql:host=" . $DB_MYSQL_HOST. ";dbname=" . $DB_MYSQL_NAME, $DB_MYSQL_USER,   $DB_MYSQL_PASS);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
于 2013-01-15T04:42:45.107 に答える