0

用户可以在我的网站上发布任何主题标题,包括纯数字(例如 12345)。主题标题成为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)。主题标题成为mysql中表的名称。

不!不要这样做。

主题标题应该成为一个值,而不是表的名称。

使用一张表来存储主题,每个主题一行。使用第二个表来存储该主题的子项。使用外键将子主题链接到父主题。

于 2012-08-16T01:48:26.273 回答
0

马克的回答已经说明了真正的问题是什么,以及如何解决它。但是,由于您将问题表述为关于反引号的问题,因此这里有一些关于它们的信息:

  • 它们应该用于转义表名和列名
  • [a-zA-Z_]如果您的表名和列名仅包含(已经是保留字的名称除外),则不需要它们
  • 它们允许您使用任意字符串命名表和列,包含空格和许多特殊字符(不是任何),如您所愿,但不建议这样做(主要是为了兼容性)。
于 2012-08-16T02:06:34.573 回答