A priori, je pense que tu dois virer le dernier point-virgule de ta requête SQL concernant ORACLE.
Par ailleurs, j'ai refais le test pas mal de fois chez moi, et ta requête continue de fonctionner très bien. Voici, si ça peut t'aider, le programme de test que j'ai fait:
<pre>
<?php
### Requêtes utilisées pour le test
$requêtes[] = "CREATE TABLE RESERVATION_TMP (id INT, debut DATE, fin DATE, salle VARCHAR2(100 CHAR) )";
$requêtes[] = "DELETE FROM RESERVATION_TMP";
### Jeu de données pour le test
$requêtes[] = "INSERT INTO RESERVATION_TMP VALUES (1, '13/12/1999','14/12/1999', 'salle1')";
$requêtes[] = "INSERT INTO RESERVATION_TMP VALUES (2, '13/12/1999','19/12/1999', 'salle2')";
$requêtes[] = "INSERT INTO RESERVATION_TMP VALUES (3, '15/12/1999','16/12/1999', 'salle1')";
$requêtes[] = "INSERT INTO RESERVATION_TMP VALUES (4, '17/12/1999','19/12/1999', 'salle1')";
$requêtes[] = "SELECT * FROM RESERVATION_TMP";
### La requête de recherche des réservations de la salle1 par date
$requêtes[] = "SELECT count(RESERVATION_TMP.id) AS compte FROM RESERVATION_TMP
WHERE ( (to_date('15/12/1999','dd/mm/yy') BETWEEN RESERVATION_TMP.debut AND RESERVATION_TMP.fin)
OR (to_date('17/12/1999','dd/mm/yy') BETWEEN RESERVATION_TMP.debut AND RESERVATION_TMP.fin ))
AND TRIM(RESERVATION_TMP.salle) ='salle1'";
### Connexion à la base Oracle dans mon cas : le service XE local d'oracle 10g
$conn = oci_connect('hr', 'hr', 'localhost/XE') or die("<p>Connexion impossible : " . oci_error()) . "</p>";
echo "<p>Connexion réussie</p>";
## Exécution du lot de requêtes prévues dans le tableau $requêtes
foreach($requêtes as $index=>$sql){
$req = @oci_parse($conn, $sql); if (!$req) echo ("<p>Erreur préparation requête ($index)</p>");
@oci_execute($req); if (!$req) echo ("<p>Erreur d'exécution requête ($index)</p>");
## Afficheur du résultat des requêtes SELECT
while($req && ($ligne = @oci_fetch_array($req, OCI_ASSOC+OCI_RETURN_NULLS)))
{
print_r($ligne);
}
}
## Fin
oci_close($conn);
?>
</pre>
Le résultat de ce programme php est le suivant:
Connexion réussie
Array
(
[ID] => 3
[DEBUT] => 15/12/99
[FIN] => 16/12/99
[SALLE] => salle1
)
Array
(
[ID] => 4
[DEBUT] => 17/12/99
[FIN] => 19/12/99
[SALLE] => salle1
)
Array
(
[ID] => 1
[DEBUT] => 13/12/99
[FIN] => 14/12/99
[SALLE] => salle1
)
Array
(
[ID] => 2
[DEBUT] => 13/12/99
[FIN] => 19/12/99
[SALLE] => salle2
)
Array
(
[COMPTE] => 2
)
Le dernier Array ([COMPTE]=>2 ) est le résultat de la requête qui te tracasse :
SELECT count(RESERVATION_TMP.id) AS compte FROM RESERVATION_TMP
WHERE ( (to_date('15/12/1999','dd/mm/yy') BETWEEN RESERVATION_TMP.debut AND RESERVATION_TMP.fin)
OR (to_date('17/12/1999','dd/mm/yy') BETWEEN RESERVATION_TMP.debut AND RESERVATION_TMP.fin ))
AND TRIM(RESERVATION_TMP.salle) ='salle1'
Ce résultat est correct car dans mon jeu d'essai de données, il y a bien 2 réservations pour la salle1 pour le 15 et 17 décembre 1999.
A+