Imcomprehension pour selectionner entre 2 date

Petit nouveau ! | 5 Messages

22 nov. 2008, 17:53

Bonjour a tous je suis nouveau et débutant en php/mysql.

J'essaye tant bien que mal de créer un petit script qui me permet de recuperers des valeurs d'une base de donnée access en php par une class mdb ado.
jusque la tout fonctionne +/- bien lol

je suis confronter a un probléme (je rapelle , je debute soyez donc indulgent quand a mon ignorance sur le sujet)

voicis le bout de mon code qui me chagrine :
$debut = "10/10/2008 00:00:00";
$fin = "14/10/2008 00:00:00";


include 'class_mdb.php';

$mdb = new mdb('Database.mdb'); 
$mdb->execute("select * from dRFXCOM______6A65S WHERE Sampledate BETWEEN $debut AND $fin");

while (!$mdb->EOF) {

$dat = $mdb->RS->fields[1]->value; //champ de la mdb 'Sampledate"
$rs =  $mdb->RS->fields[2]->value; // champs de la mdb 'discrete' contenant 0 ou 1,2,3

$array = array(1=>$rs,$dat);
print_r ($array);
echo '<br>';

$mdb->MoveNext();

$debut et $fin sont mis en début du code juste pour test , en fait elle devront être recupérer par un form POST que l'utilisateur entreras sont date/heure de début et de fin .

dans la .mdb le champ Sampledate est formater par access sous forme de date et est stocké comme suit :

22/11/2008 04:27:40

L'erreur générée est la suivante :
Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft JET Database Engine<br/><b>Description:</b> Erreur de syntaxe (op�rateur absent) dans l'expression 'Sampledate BETWEEN 10/10/2008 00:00:00 AND 14/10/2008 00:00:00'.' in C:\Inetpub\WWW\test\class_mdb.php:114 Stack trace: #0 C:\Inetpub\WWW\test\class_mdb.php(114): com->execute('select * from d...', Object(variant)) #1 C:\Inetpub\WWW\test\example.php(24): mdb->execute('select * from d...') #2 {main} thrown in C:\Inetpub\WWW\test\class_mdb.php on line 114
Je me doute que c'est un problème du style de declarer un format date dans une variable ou quelque chose comme ca mais cela fait plusieur jour que je chercher sans trouver la réponse.

également lorsque je demande de lister mon tableau contenant les valeurs des 2 champs de la base access j'obtiens correctement les donnée du champ $rs qui ne contient que des 0 et 1 mais lors du passage de $dat dans le tableaux j'obtient au lieus de la date le message "Variant Object" a chauqe ligne

Je suppose que c'est lié , mais voila ou me suis je tromper ?

si une âme charitable pouvait m'éclairer sur ce sujet

Merci .

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 nov. 2008, 21:46

Tu as effectivement une erreur de syntaxe dans ta requête sql (je te recommande de la mettre dans une variable avant de l'exécuter, cela te permet de l'afficher et de vérifier la chaine qui sera envoyé à ta base de données :))
$sql = "select * from dRFXCOM______6A65S WHERE Sampledate BETWEEN $debut AND $fin";
$mdb->execute($sql); 
La requête envoyée est donc :

Code : Tout sélectionner

select * from dRFXCOM______6A65S WHERE Sampledate BETWEEN 10/10/2008 00:00:00 AND 14/10/2008 00:00:00
Le problème vient du fait que les dates que tu passes ne sont pas délimitées par des apostrophes comme devrait l'être toute chaine envoyée à ta base de données. Il devrait donc te suffir d'ajouter des apostrophes de part et d'autre de tes valeurs pour éviter l'erreur de syntaxe sql :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 5 Messages

23 nov. 2008, 13:45

Salut ryle et merci pour ta réponse,
Malheureusement cela ne change rien,

J'ai fait comme conseiller j'ai mis entre "" et voila l'erreur

Code : Tout sélectionner

23/11/2008 12:39:07select * from dRFXCOM______6A65S WHERE Sampledate BETWEEN "2/10/2008 4:32:45" AND "3/10/2008 0:42:11" Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Microsoft JET Database Engine<br/><b>Description:</b> Type de données incompatible dans l'expression du critère.' in C:\Inetpub\WWW\test\class_mdb.php:114 Stack trace: #0 C:\Inetpub\WWW\test\class_mdb.php(114): com->execute('select * from d...', Object(variant)) #1 C:\Inetpub\WWW\test\example.php(26): mdb->execute('select * from d...') #2 {main} thrown in C:\Inetpub\WWW\test\class_mdb.php on line 114
je rapelle que le champ Sampledate et formater dans access comme champs date , je ne doit pas spécifie a php le format du champs date de access au préalable ?
un peu comme en vb "dim as ... " ou quelque chose comme ça ?

Merci
EDIT:
Voila tout compte fait j'ai passer ma table access en mysql pour developper le petit script je verrais aprés comment le "porter" avec Adodb access.

voicis pour finir en mysql comment selectionner entre 2 date lorsqu'elle sont en format text dans la BDD et nom pas en DATE si ca peut aider qulq'un.
<?php
$bouton = $_POST['send'];
if(!empty($bouton)) {
 $debut = trim($_POST['debut']);
 $fin = trim($_POST['fin']);
 if(!empty($debut) && !empty($fin)) {
 echo 'Choix: '.$debut.' '.$fin.'<br>';
 }
 else {
 echo 'vous n\'avez pas rempli tous 
 les champs';
 }
}

#$debut = '2/10/2008 00:00:00';
#$fin = "3/11/2008 23:55:00";
#connect mysql
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$req = mysql_query("SELECT * FROM rfxcom where STR_TO_DATE(SampleDate, '%e/%m/%Y %k:%i:%s') between STR_TO_DATE('$debut', '%e/%m/%Y %k:%i:%s') and STR_TO_DATE('$fin', '%e/%m/%Y %k:%i:%s')");
print ($req);
echo '<br>';
while ($donnees = mysql_fetch_array($req) )
{
 echo $donnees['Id'];
 echo $donnees['SampleDate'],' ';
 echo $donnees['Discrete'];
 echo '<br>';
}


mysql_close(); 

?>