Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-list()查询不工作_Php_Mysql - Fatal编程技术网

PHP-list()查询不工作

PHP-list()查询不工作,php,mysql,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 我认为需要添加M

当我在$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
我认为需要添加MYSQL\u ASSOC 去做循环的线

mysql\u fetch\u row$result,mysql\u ASSOC

默认值为:MYSQL\u

什么意思是在php循环中获得表名的条目,
索引项,比如0,1,2,…

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

print_r(mysql_fetch_row($result));
输出

我认为您使用的是错误的:

描述

这实际上不是一个函数,而是一个语言构造。列表用于>在一个操作中分配变量列表

例如:

$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函数,因为您可以定义感兴趣的数组的适当索引并只分配它们,但我认为数组访问更清晰:

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

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

我确信您的SHOW TABLES查询返回的是垃圾。我可以通过将现有表_name.frm复制到本地数据库数据文件夹中的&@.frm来重现您的问题。确保数据库未损坏。请尝试修复:

事实上,我最近回忆起我的 第一个表名实际上是 &*+. 我是故意加上去的 发展

您想知道为什么SQL会失败

引用您的表名,因为这个表名到目前为止还不是一个可以直接使用的表名

差不多

"SELECT COUNT(*) FROM \"$table\" ...

我想这就是你想要的:

$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\u escape\u字符串应该可以工作。还有另一个函数,mysql\u real\u escape\u string,可能更合适。您可能需要阅读相关文档。

哪里定义了$table?什么是$table?让我们退一步。你到底想做什么?嗯,我正试图显示数据库中包含$entry的所有表的列表。我嗅到了sql注入漏洞。看起来你的show tables查询返回的是垃圾。你能发布查询的输出吗?我很欣赏这个建议,但是当我这么做的时候,我得到了这个错误:警告:mysql的参数计数错误。\u fetch\u row对不起,我错了,我认为你使用fetch\u数组,你使用fetch\u row这不是问题,但是试着这样做:while$tmp\u tbl=mysql\u fetch\u array$res\u tbl{$curr\u tbl=$tmp\u tbl[0]}如果在表名周围加上`从$table中选择COUNT*。。。我试过了,但我甚至不能创建一个名为&*+的表。我只记得我的第一个表名是&*+。我认为那是个错误。我在开发过程中添加了这个奇怪的表名。如果重命名/删除该表会发生什么?我尝试在$table周围放置'。我将打印一些内容,看看您是否解决了我的问题。快速问题:我将如何打印或回显$table_list[]?是的,所有表都有一个名为site的列。我会试试你的建议。你也连接到数据库feather?是的,我连接到feather。我尝试了以下代码:while$row=mysql\u fetch\u assoc$result{$sqlA=SELECT COUNT FROM${row['table']}站点,如“$entry”;$resA=mysql\u query$sqlA或die$sqlA:.mysql\u错误;list$isThere=mysql\u fetch\u row$resA;if$isThere{$table\u list[]=$table;}我得到了这个错误:从像“miami.com”这样的站点选择COUNT:您的SQL语法中有一个错误;查看与您的MySQL服务器版本对应的手册,了解在第1oh行的“WHERE site LIKE”miami.com附近使用的正确语法,您必须将“table”更改为正确的索引。执行var_dump$行;出口在执行sql语句并以手动方式打印结果之前,我的第一个表名叫做&*+。在开发过程中,我特意添加了它,以查看它是否有效
"SELECT COUNT(*) FROM \"$table\" ...
$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;
  }
}