Bonjour,
Je cherche à faire un filtre avant l'insertion de données pour éviter les doublons en base de données.
Pour cela j'ai fait ceci:
Or, il y a un problème car cela affiche ceci:
Erreur SQL (addbooking). Erreur de syntaxe près de 'WHERE NOT EXISTS (SELECT client_id, arrival_date, departure_date, booking_date, ' à la ligne 2
Vous noterez que cela n'affiche pas ce qui se trouve après booking_date alors qu'il y a encore une donnée.
J'ai également noté que si j'écris la requête comme ceci:
Cela mange un morceau de la requête et affiche ceci:
Erreur SQL (addbooking). Erreur de syntaxe près de 'WHERE NOT EXISTS ( SELECT client_id, arrival_date, departure_date, book' à la ligne 2
D'où peut venir ce problème ?
D'avance merci.
Je cherche à faire un filtre avant l'insertion de données pour éviter les doublons en base de données.
Pour cela j'ai fait ceci:
public function addBooking(Booking $booking)
{
$sql ='INSERT INTO bookings (client_id, arrival_date, departure_date, booking_date, room_id)
WHERE NOT EXISTS (SELECT client_id, arrival_date, departure_date, booking_date, room_id FROM bookings
WHERE client_id=:client_id AND arrival_date=:arrival AND departure_date=:departure AND booking_date=:today AND room_id=:room_id)';
$stmnt = $this->_db->prepare($sql);
$clientId = $booking->getClientId();
$arrival = $booking->getArrivalDate();
$departure = $booking-> getDepartureDate();
$today = $booking->getToday();
$roomId = $booking->getRoomId();
$stmnt->bindParam(':client_id', $clientId);
$stmnt->bindParam(':arrival', $arrival);
$stmnt->bindParam(':departure', $departure);
$stmnt->bindParam(':today', $today);
$stmnt->bindParam(':room_id', $roomId);
$stmnt->execute();
//gestion des erreurs
$errors = $stmnt->errorInfo();
if ($errors[0] != '00000')
{
echo 'Erreur SQL (addbooking). ' . $errors[2] . '<br>';
}
else
{
$success_msg = 'Les données ont bien été enregistrées en base de données';
}
}
Or, il y a un problème car cela affiche ceci:
Erreur SQL (addbooking). Erreur de syntaxe près de 'WHERE NOT EXISTS (SELECT client_id, arrival_date, departure_date, booking_date, ' à la ligne 2
Vous noterez que cela n'affiche pas ce qui se trouve après booking_date alors qu'il y a encore une donnée.
J'ai également noté que si j'écris la requête comme ceci:
$sql ='INSERT INTO bookings (client_id, arrival_date, departure_date, booking_date, room_id)
WHERE NOT EXISTS (
SELECT client_id, arrival_date, departure_date, booking_date, room_id FROM bookings
WHERE client_id=:client_id AND arrival_date=:arrival AND departure_date=:departure AND booking_date=:today AND room_id=:room_id)';
Cela mange un morceau de la requête et affiche ceci:
Erreur SQL (addbooking). Erreur de syntaxe près de 'WHERE NOT EXISTS ( SELECT client_id, arrival_date, departure_date, book' à la ligne 2
D'où peut venir ce problème ?
D'avance merci.