-1

小さな MYSQL テーブルに対して単純なクエリを作成しようとしていますが、Wh​​ere 句を挿入すると、無効なクエリ エラーが突然発生します ( while(mysql_fetch_array ){}where なしで作業すると a が追加されます)。MYSQL コンソールに 1064 (構文) エラーが表示されますが、MYSQL のドキュメントを確認したところ、適切な構文を使用していると判断できました。

<?php
$ind=rand(1,3);
$quote=Null;
$sign=Null;
$afil=Null;
$con=mysql_connect(localhost,root,********);//connect to database
mysql_select_db("phone_site",$con);//select table
$query="SELECT * FROM quotes WHERE index=$ind";//get the row for that index
$data=mysql_query($query);
//print out text
print ("<p id=\"quote\">" . $data['quote'] . "</p>");
print ("<p id=\"ename\">" . $data['sign'] . "</p>");
print ("<p id=\"afill\">--  " . $data['afil'] . "</p>");
mysql_close($con);//close connection
?>

誰が問題が何であるか知っていますか?XAMPPを使用しています。そのMYSQLに何か問題がありますか?

4

3 に答える 3

10

INDEXは MySQL の予約語の 1 つです。

SELECT、DELETE、BIGINT などの特定の単語は予約されており、テーブル名や列名などの識別子として使用するには特別な処理が必要です。これは、組み込み関数の名前にも当てはまります。

セクション8.2「スキーマオブジェクト名」で説明されているように予約語を引用すると、予約語を識別子として使用できます</a>

そのような名前の列がある場合は、列名を引用符で囲む必要があります。スキーマ オブジェクト名を参照してください。

識別子の引用文字はバッククォート (「`」) です。

つまり、クエリは次のようになります。

$query="SELECT * FROM quotes WHERE `index`=$ind";


私の答えを完成させるために、ダストマシンのものを見た後、誰が言った:

テーブルが作成されたときに文句を言わなかったことに少し驚いています。

テーブルは phpMyAdmin や MySQL Workbench などのツールで作成されていると思います。そして、それらは一般的に(常に、一部の人にとっては)列名を引用して、その種の問題を回避します。


コメントの後に編集:表示されませんでしたが、この種のコードを使用しています:

$data=mysql_query($query);
print ("<p id=\"quote\">" . $data['quote'] . "</p>");

mysql_query関数は直接データを返しません。「リソース」のみを返します(マニュアルのページを引用) :

mysql_fetch_array()返された結果リソースは、返されたデータにアクセスするために、 および結果テーブルを処理する他の関数に渡される必要があります。

すべての問題が解決するかどうかはわかりませんが(何も表示されず、生のHTMLタグでさえ奇妙です)、少なくとも少しは役立つかもしれません...

于 2009-12-04T21:10:25.020 に答える
1

問題は単語の使用だと思います。これは特別な意味をindex持つ予約語であり、列名として使用すべきではありません。テーブルが作成されたときに文句を言わなかったことに少し驚いています。

于 2009-12-04T21:11:53.850 に答える
1

これを試してください、それは私のために働きます:

$query="SELECT * FROM quotes WHERE index='$ind'";
于 2011-10-09T03:54:50.650 に答える