0

ユーザーは、純粋な数字 (例: 12345) を含む任意のトピック タイトルを私の Web サイトに投稿できます。トピックのタイトルは、mysql のテーブルの名前になります。トピック タイトルとして数字をテストしているときに、さまざまな場所で MYSQL エラーに遭遇しました。問題は、バックティック マークを使用して SQL クエリを作成しなかったことにあると判断しました。

可能なタイトル (テーブル) が mysql エラーを返さないようにするには、すべてのクエリを適切に記述するにはどうすればよいですか? 以下のコード例。他に問題を引き起こす可能性のあるテーブル タイトルは何ですか?

<?php
for ($i=0; $i<4; $i++) {
// select by rand
$offset_result = mysql_query( " SELECT FLOOR(RAND() * COUNT(*)) AS `offset` FROM `$random_slash[$i]` ");
$offset_row = mysql_fetch_object( $offset_result ); 
$offset = $offset_row->offset;
$result = mysql_query( " SELECT * FROM `$random_slash[$i]` LIMIT $offset, 1 " );

//$rs = @mysql_query($sql);
while ($row = mysql_fetch_array($result)) {?>
        <div class="quadrant">
            <h2 class="alignleft"><a href="/<?php echo $random_slash[$i]; ?>">

注 - 目盛りはコードを示しているようです

4

2 に答える 2

5

ユーザーは、純粋な数字 (例: 12345) を含む任意のトピック タイトルを私の Web サイトに投稿できます。トピックのタイトルは、mysql のテーブルの名前になります。

いやいや!これをしないでください。

トピックのタイトルは、テーブルの名前ではなく、値にする必要があります。

1 つのテーブルを使用してトピックを格納します (トピックごとに 1 行)。2 番目のテーブルを使用して、そのトピックの子を格納します。外部キーを使用して、子トピックを親トピックにリンクします。

于 2012-08-16T01:48:26.273 に答える
0

マークの答えは、実際の問題とその解決方法をすでに示しています。しかし、あなたの質問はバックティックに関するものであると述べたので、ここにそれらに関するいくつかの情報があります:

  • テーブル名と列名をエスケープするために使用する必要があります
  • テーブル名と列名にのみが含まれている場合は必要ありません[a-zA-Z_](既に予約語になっている名前を除く)。
  • これらを使用すると、必要に応じてスペースと多くの特殊文字 ( を除く) を含む任意の文字列でテーブルと列に名前を付けることができますが、これはお勧めできません(主に互換性のため)。
于 2012-08-16T02:06:34.573 に答える