[PDO] [PHP] WHERE en BETWEEN probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • michaelboon82
  • Registratie: December 2010
  • Laatst online: 17-09 08:18
Beste mede-tweakers,

Via PDO wil ik in mijn database alle items (van kolom 'naam') tussen 1 januari 2014 en 1 april 2014 tonen.
Tabel datum_tijd is in 'datetime' format.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$start_date = '2014-01-01 00:00:00';  
$end_date = '2014-04-01 00:00:00'; 

    $sQuery = " 
        SELECT 
            naam, datum_tijd
        FROM 
            stats
        ORDER BY 
            naam
        WHERE
            datum_tijd BETWEEN '".$start_date."' AND '".$end_date."'
        "; 
        
    $oStmt = $db2->prepare($sQuery); 
    $oStmt->execute();


Echter krijg ik de foutmelding:

code:
1
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE datum_tijd BETWEEN '2014-01-01 00:00:00' AND '2014-04-01 00:00:00'' at line 1' in /public/sites/www.metlichtgeschreven.nl/boekhoud/stats/stats_count.php:53 Stack trace: #0 /public/sites/www.metlichtgeschreven.nl/boekhoud/stats/stats_count.php(53): PDOStatement->execute() #1 {main} thrown in /public/sites/www.metlichtgeschreven.nl/boekhoud/stats/stats_count.php on line 53


Betreft de:

code:
1
2
WHERE
            datum_tijd BETWEEN '".$start_date."' AND '".$end_date."'


Heb ik al vele varianten geprobeerd:
- Zonder aanhalingstekens en quotes
- Alleen met aanhalingstekens
- Alleen met quotes

De code werkt wel als ik de WHERE en BETWEEN gedeelte achterwege laat.
Echter laat hij dan natuurlijk alle items zien.
Terwijl ik dit tussen 2 bepaalde datums wil tonen.

Krijg de oplossing niet gevonden, maar wellicht zoek ik in de verkeerde hoek?
Weet iemand een oplossing?

Alvast bedankt voor de moeite!

Acties:
  • 0 Henk 'm!

  • n2theb
  • Registratie: Augustus 2012
  • Laatst online: 17-09 10:32

n2theb

Tweakers Abonnee

Heb je al geprobeerd de SQL zonder php in de phpmyadmin te draaien? Wat gebeurt er dan?

Als ik op Google het probleem in tik met SQLSTATE[42000], dan krijg ik veel informatie te zien over het gebruik van backticks(`) om kolommen en tabel heen. http://stackoverflow.com/...pdateing-integer-to-table

Acties:
  • 0 Henk 'm!

  • Tribits
  • Registratie: Augustus 2011
  • Laatst online: 20-09 22:37

Tribits

Onkruid vergaat niet

Beetje verwarrende foutmelding ja, die ORDER BY hoort na de WHERE clause. Dus:

PHP:
1
2
3
4
5
6
7
8
9
10
    $sQuery = " 
        SELECT 
            naam, datum_tijd
        FROM 
            stats
        WHERE
            datum_tijd BETWEEN '".$start_date."' AND '".$end_date."'
        ORDER BY
            naam
        ";

Master of questionable victories and sheer glorious defeats


Acties:
  • 0 Henk 'm!

Verwijderd

En zo gebruik je natuurlijk geen PDO. Gebruik eens netjes bindParam.

Acties:
  • 0 Henk 'm!

  • michaelboon82
  • Registratie: December 2010
  • Laatst online: 17-09 08:18
Gisteren totaal geen tijd gehad om het e.e.a. te proberen, excuses.

n2theb:
Niet geprobeerd omdat de oplossing van Tribits werkte.
Toch bedankt voor het meedenken!

Tribits:
Ja zo werkt het :) een klein dom dingetje, maar wel belangrijk.
Bedankt!

Cheatah:
Ik ben slechts een newbie op het gebied van SQL en PDO.
Dat het nu werkt is voor mij al meer dan genoeg.
Bovendien klinkt je 'advies' naar mijn mening dwingend en kleinerend en voegt het niets toe aan mijn vraag.

Acties:
  • 0 Henk 'm!

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 19-09 21:09
michaelboon82 schreef op dinsdag 17 juni 2014 @ 11:33:
Cheatah:
Ik ben slechts een newbie op het gebied van SQL en PDO.
Dat het nu werkt is voor mij al meer dan genoeg.
Bovendien klinkt je 'advies' naar mijn mening dwingend en kleinerend en voegt het niets toe aan mijn vraag.
Het zou ook verplicht moeten zijn, zeker voor newbies ;). Leer het maar gewoon direct goed aan, het is goed bedoeld advies ;)

Acties:
  • 0 Henk 'm!

  • michaelboon82
  • Registratie: December 2010
  • Laatst online: 17-09 08:18
Het is ook zeker niet zo dat ik het advies in de wind sla of dat ik van mening ben dat Cheatah maar een 'zeurpiet' is.
Integendeel.
Maar de manier waarop het gepresenteerd werd vond ik niet zo prettig.
Had ook zo gekund:

"Op deze manier PDO gebruiken is niet conform standaard. In dit geval zou je het beste bindParam kunnen gebruiken, want daarmee leer je het op een goede manier aan."
Klinkt bij mij al een stuk prettiger d:)b

Anyway, ik zal dat bindParam eens gaan uitzoeken.
Want ik ben het wel eens tegengekomen bij de tutorials, maar niet in de beginner-tutorials die ik vond op het internet.
Dus wist niet beter ;) maar zo leren we elke dag bij.
Pagina: 1