2009-11-06 64 views
3

可能重复:
PHP warning help?报警主叫时mysqli_error()

我试图从数据库联接三个表中,为了显示用户所选类别,但我得到以下错误。

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' 

我该如何解决这个问题?

谢谢大家的帮助。有没有办法我可以奖励每一个在这里帮助的人,而不是一个人?

回答

0

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

print mysqli_error($mysqli); 
4

你忘了一个必要的参数传递给mysqli_error()。更改

print mysqli_error(); 

print mysqli_error($mysqli); 

一旦你改正,你就可以看到错误消息和调试进一步。

供参考:看起来你奇怪地混合了OQ和mysqli的程序风格用法。你应该坚持任何一个或另一个。

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 
+0

@Lukasz Lysik:在SQL表名+1尼斯渔获物。 – Asaph 2009-11-06 17:20:40

+0

你的编辑帮助,但知道一切都显示了六次。有没有办法我可以限制它只显示一次。 – 123abc 2009-11-06 17:24:57

+0

检查@R。 Bemrose建议。如果它显示六次问题与您的联接(我假设您不重复您的表中的数据)。 – 2009-11-06 17:26:43

0

查询是问题。首先在PhpMyAdmin中测试查询,或者您可以随意使用的任何mySQL客户端,然后您将看到它不起作用。

1

有很多关于如何解决mysqli_error行注释,但有两个问题与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 
+0

这固定每一件事感谢。 – 123abc 2009-11-06 17:26:43

+0

@ 123abc - 我看到你是新来的。如果答案对你有帮助,并且你认为它是最好的,请接受它(在左侧打勾)。 – 2009-11-06 18:20:56