#php #mysqli #inner-join
#php #mysqli #внутреннее объединение
Вопрос:
Я знаю, что PHP может стать довольно сложным при использовании INNER JOIN. Я поиграл с несколькими идеями, и, похоже, ничего не работает.
Итак, это то, над чем я работаю, когда пользователь A блокирует пользователя B пользователь B удаляется из своих друзей.
Итак, у меня есть это и есть ошибка
У вас ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с ‘user1_id = 15 И user2_id = 3 И status = 1 ВНУТРЕННЕЕ ОБЪЕДИНЕНИЕ друзей В блоке. УДАЛИТЬ fro’ в строке 1
Кто-нибудь может полностью объяснить внутреннее объединение и показать мне, где я ошибся для будущего использования.
$query = mysqli_query($mysqli,"INSERT INTO block user1_id=$user1_id AND user2_id=$user2 AND status=1
INNER JOIN friends ON block.
DELETE from friends where user1_id=$user1_id AND user2_id=$user2 AND status=2 ")
or die (mysqli_error($mysqli));
Комментарии:
1. Почему вы используете
INNER JOIN
на вставке?
Ответ №1:
Ваш SQL сильно испорчен. (Это не ошибка PHP).
Пожалуйста, пожалуйста, пожалуйста, взгляните на синтаксис MySQL INSERT и MySQL DELETE. Я также не понимаю вашего INNER JOIN
INSERT
заявления.
MySQLi также позволяет выполнять только 1 команду на запрос (что-то о безопасности и хорошем дизайне?)
INSERT
должно выглядеть так (я не знаю структуры ваших таблиц, поэтому я предполагаю, что здесь несколько:
INSERT INTO block (user1_id, user2_id, status) VALUES ('$user1_id', '$_user2_id', 1)
Помимо этого, ваш запрос на удаление выглядит нормально. Просто убедитесь, что он находится в своем собственном mysqli_query()
.
Ответ №2:
Вы должны использовать два разных оператора, и вы должны использовать параметризованные запросы.
$sql_insert = "INSERT INTO block (user1_id, user2_id, status) values (?,?,1)";
$stmt = $mysqli->prepare($sql_insert);
$stmt->bind_param("s", $user1_id);
$stmt->bind_param("s", $user2_id);
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
$sql_delete = "DELETE FROM friends where user1_id=? AND user2_id=? AND status=2 "
$stmt = $mysqli->prepare($sql_delete);
$stmt->bind_param("s", $user1_id);
$stmt->bind_param("s", $user2_id);
if (!$stmt->execute()) {
echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}
Комментарии:
1. Спасибо за то, что вы были очень полезны и очень полезны, а не сбили меня с ног. Теперь это имеет гораздо больше смысла.