我必须告诉你这是基于一个非常简单的PHP理论,但它并不简单,因为它出现。
这是方案
我有10个表(table_1,table_2,table_3等),目前我想在循环中获取每个表的结果集。所以为了满足我的要求,当我使用下面的代码时,它返回一个错误
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in
守则
$table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables WHERE
table_schema = 'milepostdb' AND table_name LIKE 'table_%' ");
while($row = mysql_fetch_array($table_count)){
$table = $row["TABLE_NAME"];
$excute = mysql_query("CALL Dummy_2('$table')");
$result = mysql_fetch_assoc($excute);//line which triggers the error
var_dump($result);
}
但是,如果我只是对表名进行硬编码并将其设置为正常
$var = 'table_1';
$excute = mysql_query("CALL Dummy_2('$var')");
$result = mysql_fetch_assoc($excute);
var_dump($result);
或
$excute = mysql_query("CALL Dummy_2('table_1')");
$result = mysql_fetch_assoc($excute);
var_dump($result);
以上代码都运作良好。
现在任何正文都可以告诉为什么传递给$table = $row["TABLE_NAME"];
的变量在分配的普通变量正常工作时会返回错误。两种方法之间的差异是什么?
答案 0 :(得分:1)
您需要先阅读第一个查询中的所有结果,然后才能开始另一个查询。
$tables = array();
$table_count = mysql_query("SELECT TABLE_NAME FROM information_schema.tables WHERE
table_schema = 'milepostdb' AND table_name LIKE 'table_%' ") or die(mysql_error());
while($row = mysql_fetch_array($table_count)){
$tables[] = $row["TABLE_NAME"];
}
mysql_free_result($table_count);
foreach ($tables as $table) {
$excute = mysql_query("CALL Dummy_2('$table')") or die(mysql_error());
$result = mysql_fetch_assoc($excute);//line which triggers the error
var_dump($result);
}