调用数据库查询功能时出现致命错误

时间:2016-08-10 11:31:05

标签: php mysql

我目前正在学习PHP,做标准的CRUD工作。我正在尝试编写一个函数(query_entire_table),当我想查询表的所有行时,我总是可以使用它,试图让它保持干燥。

db.php中:

<?php
  $db['db_host'] = 'localhost';
  $db['db_user'] = 'root';
  $db['db_pass'] = '';
  $db['db_name'] = 'cms';

  foreach($db as $key => $value){
    define(strtoupper($key), $value);
  }

  $connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

  function query_entire_table($tablename){
    $query = "SELECT * FROM " . $tablename;
    $select_all_entries = mysqli_query($connection, $query);
    return mysqli_fetch_assoc($select_all_entries);
  }
?>

当我调用该函数时,我收到以下错误: 致命错误:无法重新声明/ Applications / XAMPP / xamppfiles / htdocs / cms / includes / db中的query_entire_table()(先前在/Applications/XAMPP/xamppfiles/htdocs/cms/includes/db.php:13中声明)。第17行的PHP

这就是我调用函数的方式:

<?php
    $posts_table = query_entire_table('posts');
    while($posts_table){
      //doing some stuff...
    }
?>

此时我只包括并调用该函数一次,并且无法解决这里发生的事情。

2 个答案:

答案 0 :(得分:4)

请仔细阅读错误消息:

  

无法重新声明query_entire_table()

与JavaScript等其他语言不同,PHP不允许重新声明函数或类:

C:\>php
<?php
function foo(){
}
function foo(){
}
^Z
PHP Fatal error:  Cannot redeclare foo() (previously declared in -:3) in - on line 5

无论您将db.php注入代码,都可能使用了错误的构造。尝试这样的事情:

require_once('/path/to/db.php');

请注意 _once 后缀。

答案 1 :(得分:1)

错误告诉您已在代码中的其他位置声明了query_entire_table函数。

这也可能意味着您不止一次地包含db.php。尝试使用include_once而不是常规包含。