PHP - 循环遍历多个表并填充多维数组

时间:2014-07-11 13:42:52

标签: php mysql arrays loops multidimensional-array

我需要遍历数据库中的多个表,然后使用其内容填充多维数组。我目前的代码是返回MySQL错误。我试过四处寻找,但我发现的一切都与我的需求不符。

代码

// The arrays that will hold the data we wish to collect
$ids = array();
$data = array();

// The database tables we want to search through
$databaseTables = array("table1", "table2", "table3", "table4");

for ($x = 0; $x < 4; $x++) {
    // Create a new array for this table's data
    $ids[] = array();
    $data[] = array();

    // Query the database
    $query = "SELECT * FROM '$databaseTables[$x]'";
    $result = @mysql_query($query) or die(mysql_error());

    // Collect the data
    while ($row = mysql_fetch_array($result)) {
        $ids[$x][] = $row['id'];
        $data[$x][] = $row['data'];
    }
}

感谢您的帮助。

修改

MySQL错误:

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“table1”附近使用正确的语法

2 个答案:

答案 0 :(得分:2)

不要引用表名,而是使用反引号:

$query = "SELECT * FROM `$databaseTables[$x]`";

如果您启用了模式ANSI_QUOTES,则可以双引号表名称,因为这会导致引号为标识符引号字符(vs字符串引号字符),但默认情况下不会设置。

来源:

  1. http://dev.mysql.com/doc/refman/5.0/en/identifiers.html
  2. http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html
  3. http://dev.mysql.com/doc/refman/5.0/en/sql-mode.html#sqlmode_ansi_quotes
  4. 顺便说一句,我建议你不再使用mysql_*函数。在PHP的未来版本中,它们已被弃用,将被删除。请参阅introduction page到mysql。

    相反,我会使用PDOmysqli

答案 1 :(得分:1)

您使用的是单引号。在MySQL中,您需要使用反向标记。只要您没有通过MySQL reserved word预期发生任何冲突,您通常也可以退出。

此外,如果您最后有or die,那么您确实不需要@错误抑制器。 MySQL函数不打印错误,但如果你在最后添加or die,你可能想看看会发生什么。删除or die或删除@错误抑制器。