PHP - list()查询不起作用

时间:2009-06-16 05:23:22

标签: php mysql

当我在$ entry = miami.com运行下面的代码时,收到以下错误消息:

SELECT COUNT(*) FROM #&*+ WHERE `site`
LIKE 'miami.com':You have an error in
your SQL syntax; check the manual that
corresponds to your MySQL server
version for the right syntax to use
near '' at line 1

看起来我没有正确定义$ table。我有什么想法可以做到这一点?

提前致谢,

约翰

    $result = mysql_query("SHOW TABLES FROM feather") 
or die(mysql_error()); 


while(list($table)= mysql_fetch_row($result))
{
  $sqlA = "SELECT COUNT(*) FROM $table WHERE `site` LIKE '$entry'";
  $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
  list($isThere) = mysql_fetch_row($resA);
  if ($isThere)
  {
     $table_list[] = $table;
  }
}

6 个答案:

答案 0 :(得分:1)

如果是我调试我会看到什么

print_r(mysql_fetch_row($result));

输出

答案 1 :(得分:1)

我认为您错误地使用了list-language construct

  

<强>描述

void list ( mixed $varname [, mixed $... ] )
     

array()一样,这不是一个真正的函数,而是一个语言结构。 list()用于&gt;在一个操作中分配变量列表。

示例:

$info = array('coffee', 'brown', 'caffeine');

// Listing all the variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";

现在,您要做的是获取动态表名(似乎)。您不需要使用list-function,因为您可以access the result as an array(您可以定义您感兴趣的数组的相应索引并仅分配它们,但我认为数组访问更加清晰):< / p>

while($row = mysql_fetch_assoc($result))
{
  $sqlA = "SELECT COUNT(*) FROM ${row['table']} WHERE `site` LIKE '$entry'";
  [...]
}

我有点好奇,你的数据库 feather 中的所有表都有一个名为 site 的列吗?否则,无论您如何格式化或重构代码,此查询都将失败。

答案 2 :(得分:1)

  

实际上,我最近回忆起了我的   确实是第一个表名   “#&放大器; * +”。我在故意添加它   发展

你想知道为什么你的SQL失败了? :)

引用你的表名,因为这个名称到目前为止不是字面上可以使用的表名。

这样的东西
"SELECT COUNT(*) FROM \"$table\" ...

答案 3 :(得分:0)

我认为需要添加MYSQL_ASSOC 到做循环的行

和mysql_fetch_row($结果,MYSQL_ASSOC)

默认值为:MYSQL_BOTH

什么意思是在php循环中你得到表名的输入, 和索引的输入,如0,1,2,...

答案 4 :(得分:0)

我很确定你的SHOW TABLES查询返回垃圾。通过将现有的table_name.frm复制到本地数据库的数据文件夹中的#&amp; @。frm,我能够重现您的问题。确保您的数据库没有损坏(意思是,尝试修复):http://dev.mysql.com/doc/refman/5.1/en/repair-table.html

答案 5 :(得分:0)

我认为这就是你所追求的:

$result = mysql_query("SHOW TABLES FROM feather") or die(mysql_error()); 

while($table_row = mysql_fetch_row($result))
{
  $table = $table_row[0];
  $sqlA = "SELECT COUNT(*) FROM `" . mysql_escape_string($table) . "` WHERE `site` LIKE '" . mysql_escape_string($entry) . "'";
  $resA = mysql_query($sqlA) or die("$sqlA:".mysql_error());
  $isThere_row = mysql_fetch_row($resA);
  $isThere = $isThere_row[0];
  if ($isThere)
  {
     $table_list[] = $table;
  }
}

注意:应该转义sql中的变量。我不使用mySQL,但我认为mysql_escape_string应该可行。还有另一个函数mysql_real_escape_string可能更适合。您可能希望阅读相关文档。