Возможный дубликат:
Помощь в предупреждении PHP?
Я пытаюсь объединить три таблицы из базы данных, чтобы отображать выбранные пользователями категории, но я получаю следующую ошибку.
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 вместо одного человека?
Вы забыли передать требуемый аргумент mysqli_error () . + Изменить
print mysqli_error();
в
print mysqli_error($mysqli);
После внесения исправления вы сможете увидеть сообщение об ошибке и продолжить отладку.
FYI: Похоже, вы странно смешиваете использование OO и процедурного стиля mysqli. Вы должны придерживаться того или другого.
Вы должны вызвать 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
Есть много комментариев о том, как исправить строку mysqli_error, но есть две проблемы с самим SQL:
users_categories
и не присоединяетесь к таблице users
вообще. Это должно работать лучше:
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
mysqli_error
требует ссылку, попробуйте:
print mysqli_error($mysqli);
Этот запрос является проблемой. Сначала проверьте запрос в PhpMyAdmin или любом другом mySQL-клиенте, который у вас есть, и вы увидите, что он не работает.