调用mysqli_error()时发出警告

时间:2009-11-06 17:05:42

标签: php mysql

  

可能重复:
  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而不是一个人的帮助?

5 个答案:

答案 0 :(得分:4)

您忘记将所需参数传递给mysqli_error()。变化

print mysqli_error();

print mysqli_error($mysqli);

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

关于如何修复mysqli_error行有很多意见,但SQL本身存在两个问题:

  1. 您要加入users_categories表两次,而不是加入users表。
  2. 第二个ON与第一个ON相同,因此它在错误的表中引用了错误的列。
  3. 这应该更好:

    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
    

答案 3 :(得分:0)

mysqli_error需要一个链接,请尝试:

print mysqli_error($mysqli);

答案 4 :(得分:0)

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