当我在$ 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;
}
}
答案 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可能更适合。您可能希望阅读相关文档。