-2

私はPHPで検索エンジンを書くことに成功しました。

試してみると、気になることが 1 つあります。

最初のエラー

(mysql_fetch_array() expects parameter 1 to be resource, boolean given in)  

2 番目のエラー

(mysql_num_rows() expects parameter 1 to be resource, boolean given in)  

申し訳ありませんが、クエリに一致するエントリが見つかりません...

ここにコードがあります

<?php

echo "<h2>Search Results:</h2><p>";

//If they did not enter a search term we give them an error
if ($find == "Account_Number")
{
echo "<p>You forgot to enter a search term!!!";
exit;
}

// Otherwise we connect to our Database
mysql_connect("localhost", "username", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());

// We perform a bit of filtering
$find = strtoupper($find);
$find = strip_tags($find);
$find = trim ($find);

//Now we search for our search term, in the field the user specified
$data = mysql_query("SELECT * FROM memaccounts WHERE upper($field) LIKE'%$find%'");

//And we display the results
while($result = mysql_fetch_array( $data ))
{
echo $result['Account_Number'];
echo $result['Name'];
echo "<br>";
echo $result['Balance'];
echo "<br>";
echo "<br>";
}

$anymatches=mysql_num_rows($data);
if ($anymatches == 0)
{
echo "Sorry, but we can not find an entry to match your query...<br><br>";
}

//And we remind them what they searched for
echo "<b>Searched For:</b> " .$find;
//}
?>

助けてください、ありがとう

4

5 に答える 5

0

クエリにエラーがある可能性があります。タイプミスがないか確認してください。
クエリをキャプチャ (エコーまたはログ) し、phpmyadmin や heidisql などのデータベース クライアントを使用して実行することをお勧めします。

于 2013-07-24T07:35:41.593 に答える
0
 Please check the query.
mysql_query() this function returns true or false to show query worked or not.
your result shows boolean means query failed.
use mysql_error() 
for ex :- 
$result=mysql_query('Your query');
if(!$res){
 die(mysql_error()); //gives information regarding error
}
于 2013-07-24T07:48:00.440 に答える
0

$find無効な文字が含まれている場合を除いて、クエリはおそらく機能します。たとえば、引用符 ( ') が含まれていると、クエリが壊れます。

を使用mysql_real_escape_stringしてこれを解決できますが、おそらく mysql* 関数の使用をまったくやめて PDO に切り替える方がよいでしょう。mysql* 関数は非推奨であり、将来のバージョンの PHP では削除される可能性があります。

于 2013-07-24T07:37:00.213 に答える
0

$findとが定義されていないため$field、クエリは次のようになります。

SELECT * FROM memaccounts WHERE upper() LIKE'%%'

これは間違ったクエリであるため、mysql_query()returnになります。FALSE(つまり$data、ですFALSE)。したがって、入力として提供されるとエラーmysql_fetch_array()mysql_num_rows()失敗しますFALSE

ヒント:

  • 入力を適切にフィルタリングするには、 を使用しますmysqli_real_escape_string()。ちなみに、テーブル照合で大文字と小文字が区別されない場合は、大文字に変更する必要はありません。

  • var_dump()var_export()echoまたはprint_r()(状況によって異なります)によって、いつでもコードをデバッグできます。

  • 非推奨mysql_*関数の使用を停止します。代わりに MySQLi または PDO を使用してください。

  • POST 値をクエリに直接挿入できるようにするため、コードは SQL インジェクション攻撃の対象となります。

于 2013-07-24T07:37:29.053 に答える