【问题标题】:Warning when calling mysqli_error() [duplicate]调用 mysqli_error() 时发出警告 [重复]
【发布时间】:2009-11-06 17:05:41
【问题描述】:

可能重复:
PHP warning help?

我正在尝试连接数据库中的三个表以显示用户选择的类别,但出现以下错误。

Warning: mysqli_error() expects exactly 1 parameter, 0 given in

我认为我在查询数据库时做错了什么。

这是下面的代码。

// Query member data from the database and ready it for display
$mysqli = new mysqli("localhost", "root", "", "sitename");
$dbc = mysqli_query($mysqli,"SELECT users.*, categories.*, users_categories.* FROM users_categories INNER JOIN users_categories ON users_categories.user_id = users.user_id JOIN categories ON users_categories.user_id = users.user_id WHERE users_categories.user_id=3");

if (!$dbc) {
    // There was an error...do something about it here...
    print mysqli_error();
}   

//Users entered category loop
while ($row = mysqli_fetch_assoc($dbc)) {
        if (! empty($row['category'])) {
                echo '<div class="skill-info">';
                echo '<p>' , htmlspecialchars($row['category']) , '</p>';
            }

    }

这是我的 MySQL 表结构。

CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL,
PRIMARY KEY (user_id)
);

CREATE TABLE categories ( 
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
category VARCHAR(255) NOT NULL, 
url VARCHAR(255) NOT NULL, 
PRIMARY KEY (id), 
INDEX parent (parent_id)
);

CREATE TABLE users_categories (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL, 
category_id INT UNSIGNED NOT NULL, 
PRIMARY KEY (id)
);

现在我收到以下错误

Not unique table/alias: 'users_categories'

我该如何解决这个问题?

感谢大家的帮助。有没有一种方法可以奖励每个人在 stackoverflow 上的帮助而不是一个人?

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    您忘记将必需的参数传递给mysqli_error()。改变

    print mysqli_error();
    

    print mysqli_error($mysqli);
    

    进行更正后,您将能够看到错误消息并进一步调试。

    仅供参考:看起来你奇怪地混合了 mysqli 的 OO 和程序风格的使用。你应该坚持其中一个。

    【讨论】:

      【解决方案2】:

      你应该用参数调用mysqli_error

      if (!$dbc) {
          print mysqli_error($mysqli);
      }   
      

      已编辑:

      你连接两个同名的表。我想在FROM 你打错了。不应该是FROM users吗?表 users 出现在列列表中,但您在 FROM 或 JOIN 中的任何位置都没有它。

      SELECT users.*, categories.*, users_categories.* 
      FROM users
      INNER JOIN users_categories ON users_categories.user_id = users.user_id 
      JOIN categories ON users_categories.user_id = users.user_id 
      WHERE users_categories.user_id=3
      

      【讨论】:

      • @Lukasz Lysik:+1 很好地理解了 SQL 表名。
      • 您的编辑有所帮助,但知道所有内容都显示了六次。有没有办法可以限制它只显示一次。
      • 检查@R。贝姆罗斯的建议。如果它显示六次,则问题出在您的 JOIN 上(我假设您没有在表中重复数据)。
      【解决方案3】:

      关于如何修复mysqli_error这一行有很多cmets,但是SQL本身有两个问题:

      1. 您要加入users_categories 表两次,根本没有加入users 表。
      2. 第二个 ON 与第一个相同,因此它引用了错误表中的错误列。

      这应该会更好:

      SELECT users.*, categories.*, users_categories.*
      FROM users_categories
      INNER JOIN users ON users_categories.user_id = users.user_id 
      INNER JOIN categories ON users_categories.category_id = categories.id
      WHERE users_categories.user_id=3
      

      【讨论】:

      • 这解决了所有问题,谢谢。
      • @123abc - 我看到你是 SO 的新手。如果它回答对您有帮助并且您认为它是最好的,请接受它(在左侧打勾)。
      【解决方案4】:

      mysqli_error 需要链接,试试:

      print mysqli_error($mysqli);
      

      【讨论】:

        【解决方案5】:

        查询是问题所在。首先在 PhpMyAdmin 或您可以使用的任何 mySQL 客户端中测试查询,您会发现它不起作用。

        【讨论】:

          猜你喜欢
          • 2012-05-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-25
          • 2021-04-13
          • 2022-01-07
          相关资源
          最近更新 更多