mysql kleine probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Francoi gckx

Francoi gckx

08/03/2013 09:13:57
Quote Anchor link
Waarom doet die het zo niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT
                      event_id, event_title, event_desc,
                      event_start, event_end
                FROM events"
;
?>


Maar zo wel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT
                    `event_id`, `event_title`, `event_desc`,
                    `event_start`, `event_end`
                FROM `events`"
;
?>


Toevoeging op 08/03/2013 09:15:57:

Ik heb ` dit teken nog niet op mijn toetsenbord
zo doet die het ook niet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT
                      'event_id', 'event_title', 'event_desc',
                      'event_start', 'event_end'
                FROM 'events'"
;
?>
 
PHP hulp

PHP hulp

01/03/2025 05:02:19
 
Marvin H

Marvin H

08/03/2013 09:19:04
Quote Anchor link
Wat is de foutmelding die je te zien krijgt? Indien je die niet krijgt voeg eerst een foutafhandeling toe.
 
- Ariën  -
Beheerder

- Ariën -

08/03/2013 09:19:16
Quote Anchor link
Linksboven staat dat teken...
Wat zegt mysql_error? Ik denk zelf dat MySQL moeilijk doet met het DESC-veld en de gereserveerde namen.
Probeer die eens te hernoemen...?
 
Erwin H

Erwin H

08/03/2013 09:39:32
Quote Anchor link
Dat teken is de backtick. De backtick heb je normaal gesproken nodig om tabel en kolomnamen die je niet mag gebruiken toch te kunnen gebruiken. Mysql heeft namelijk een lijst met reserved words die een speciale betekenis hebben in mysql en daardoor niet als tabel of kolomnaam gebruikt kunnen worden (`from` bijvoorbeeld).
In jouw namen komen echter geen reserved words voor. Net nog even getest, maar als ik een tabel aanmaak met kolommen zoals gegeven dan werkt het gewoon.

Overigens quotes om de tabel en kolomnamen heenzetten kan nooit werken, want dan worden die gezien als strings.
 
Francoi gckx

Francoi gckx

08/03/2013 09:47:50
Quote Anchor link
Je bedoelde event_desc? ik heb dat veranderd maar het bleef hetzelfde

Zo doet die het ook
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT
                    event_id, event_title, event_desc,
                    event_start, event_end
                FROM `events`"
;
?>

Maar ik wil gewoon dat die het zonder die ` tekens doet

Ik krijg geen error

Toevoeging op 08/03/2013 09:49:43:

Erwin H op 08/03/2013 09:39:32:
In jouw namen komen echter geen reserved words voor. Net nog even getest, maar als ik een tabel aanmaak met kolommen zoals gegeven dan werkt het gewoon.


Bij mij werkt het ook in phpmyadmin zonder quotes of backticks maar niet vanuit de script


Toevoeging op 08/03/2013 09:57:17:

Trouwens bedankt voor die uitleg over backtick en reserverd words erwin
 
Erwin H

Erwin H

08/03/2013 10:01:13
Quote Anchor link
Laat je complete script (voor wat betreft het database deel) eens zien? Heb je nog andere clausules in je query?
 
Francoi gckx

Francoi gckx

08/03/2013 10:03:55
Quote Anchor link
Ja dit is heel die method:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
private function _loadEventData($id=NULL)
    {

        $sql = "SELECT
                    event_id, event_title, event_desc,
                    event_start, event_end
                FROM `events`"
;
                
        /*
        * If an event ID is supplied, add a WHERE clause
        * so only that event is returned
        */
        
        if ( !empty($id) )
        {

            $sql .= "WHERE event_id=:id LIMIT 1 ";
        }

        
        /*
        * Otherwise, load all events for the month in use
        */

        else
        {
            /*
            * Find the first and last days of the month
            */

            $start_ts = mktime(0,0,0,$this->_m, 1, $this->_y);
            $end_ts = mktime(23,59,59,$this->_m+1, 0, $this->_y);
            $start_date = date('Y-m-d H:i:s', $start_ts);
            $end_date = date('Y-m-d H:i:s', $end_ts);
            
        /*
        * Filter events to only those happening in the
        * currently selected month
        */
    
        $sql .= "WHERE event_start
                    BETWEEN '"
.$start_date."'
                    AND '"
.$end_date."'
                ORDER BY event_start"
;
        }

        
        try
        {
            $stmt = $this->db->prepare($sql);
            
            /*
            * Bind the parameter if an ID was passed
            */

            if ( !empty($id) )
            {

                $stmt->bindParam(":id", $id, PDO::PARAM_INT);
            }

            
            $stmt->execute();
            $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
            $stmt->closeCursor();

            return $results;
        }

        catch ( Exception $e )
        {

            die ( $e->getMessage() );
        }
    }
}

?>
Gewijzigd op 08/03/2013 10:05:05 door Francoi gckx
 
Erwin H

Erwin H

08/03/2013 10:12:01
Quote Anchor link
En daar gaat het dus mis :-)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
        $sql
= "SELECT
                    event_id, event_title, event_desc,
                    event_start, event_end
                FROM `events`"
;

        if ( !empty($id) )
        {

            $sql .= "WHERE event_id=:id LIMIT 1 ";
        }

?>

Dit levert de volgende string op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
   event_id, event_title, event_desc,
   event_start, event_end
FROM `events`WHERE event_id=:id LIMIT 1

Zonder die backticks krijg je dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
   event_id, event_title, event_desc,
   event_start, event_end
FROM eventsWHERE event_id=:id LIMIT 1

En de tabel eventsWHERE kent mysql vast niet....

Probleem is alleen dat je niet controleert of je query wel gelukt is en dus zie je de mysql foutmelding ook niet. php kijkt hier niet naar, dus een php foutmelding zal je niet krijgen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/03/2013 10:12:29
Quote Anchor link
In principe is EVENT een gereserveerd woord in mysql. maar EVENTS in principe niet.. Maar er zijn natuurlijk weer de verschillende versies waardoor het misschien bij Francoi wel gezien wordt als een gereserveerd woord.

@Francoi: als je EVENTS wijzigd naar bijv. EVNTS en dan ook even de tabelnaam wijzigen in phpmyadmin, dan werkt het wel?
Gewijzigd op 08/03/2013 10:17:56 door Frank Nietbelangrijk
 
- SanThe -

- SanThe -

08/03/2013 10:14:53
Quote Anchor link
Francoi gckx op 08/03/2013 09:47:50:
Bij mij werkt het ook in phpmyadmin zonder quotes of backticks maar niet vanuit de script


Dan zal er een andere reden zijn dat het niet werkt.
Laat het stukje code dat niet werkt eens zien.


Ik had een aantal posts niet gezien.
Gewijzigd op 08/03/2013 10:16:49 door - SanThe -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

08/03/2013 10:19:17
Quote Anchor link
Francoi: Misschien toch de volgende keer je query even echo-en om te kijken of alles wel netjes aan elkaar wordt geplakt? :-)
 
Francoi gckx

Francoi gckx

08/03/2013 10:22:19
Quote Anchor link
@Erwin ik heb $sql .= "WHERE event_id=:id LIMIT 1 ";
veranderd naar $sql .= " WHERE event_id=:id LIMIT 1 ";
Dit helpt ook niet maar die try catch gebeuren is toch de foutafhandeling?


@Frank ik heb gedaan wat je zei:
maar nog steeds moet ik het zo doen FROM `evnts`


Het is al gelukt Erwin jij had gelijk als ik het zo doe
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
SELECT
                    event_id, event_title, event_desc,
                    event_start, event_end
                FROM evnts "
?>


Werkt die wel.

Toch mijzelf aanleren om querys te echoen en in foutafhandeling te verdiepe

Bedankt!
Gewijzigd op 08/03/2013 10:26:43 door Francoi gckx
 
Erwin H

Erwin H

08/03/2013 10:28:58
Quote Anchor link
Bij dit deel doe je hetzelfde fout:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
        $sql
.= "WHERE event_start
                    BETWEEN '"
.$start_date."'
                    AND '"
.$end_date."'
                ORDER BY event_start"
;
        }

?>

Dit ook al aangepast?

De try..catch kan de foutafhandeling zijn als je pdo goed hebt ingesteld.
Heb je bij de connectie de error mode van PDO ingesteld op PDO::ERRMODE_EXCEPTION?
 
Francoi gckx

Francoi gckx

08/03/2013 10:30:56
Quote Anchor link
maar is die try catch geen foutafhandeling?

Toevoeging op 08/03/2013 10:32:29:

Ja aangepast maar ik hoefde alleen die bij events te doen

Nee zo wordt de connectie bepaald:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$dsn
= "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
$dbo = new PDO($dsn, DB_USER, DB_PASS);
?>
 
Erwin H

Erwin H

08/03/2013 10:36:32
Quote Anchor link
Een try catch blok is om exceptions in php op te vangen. In principe is een mysql fout geen php fout en zal niet automatisch een php exception opleveren. Als je mysql_ of mysqli_ gebruikt zal je die fouten niet als een php exception kunnen opvangen.
PDO heeft wel de mogelijkheid om sql fouten in php als exception op te werpen. Alleen moet je dat wel zelf aangeven via setAttribute. Je zal dus nadat je de connectie hebt gemaakt deze call moeten uitvoeren:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$dbo
->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
?>

Dan komen sql fouten als een exception in php terecht.
Gewijzigd op 08/03/2013 10:37:07 door Erwin H
 
Francoi gckx

Francoi gckx

08/03/2013 10:38:06
Quote Anchor link
Dus zo?

$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
$dbo = new PDO($dsn, DB_USER, DB_PASS);
$dbo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );



Toevoeging op 08/03/2013 10:38:27:

en dan hoef ik niks meer in die try catch te veranderen?
 
Erwin H

Erwin H

08/03/2013 10:38:35
Quote Anchor link
Yep, probeer het eens, door die spatie weer weg te halen, krijg je dan wel de foutmelding?
 
Francoi gckx

Francoi gckx

08/03/2013 10:39:52
Quote Anchor link
Nee geen error gekregen, helaas
 
Erwin H

Erwin H

08/03/2013 10:42:47
Quote Anchor link
Da's vreemd, zou nu wel moeten komen. Voer eens een gewoon compleet foute query in, wat gebeurt er dan?
 
Francoi gckx

Francoi gckx

08/03/2013 10:50:24
Quote Anchor link
Zo gedaan:
$sql = "SEL
event_id, event_title, event_desc,
event_start, event_end
FROM event";
zelfs dan niet

((((((Wel heb ik in een ander class/method
dit staan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
protected function __construct($dbo=NULL)
    {

        if ( is_object($db) )
        {

            $this->db = $db;
        }

        else
        {
            // Constants are defined in /sys/config/db-cred.inc.php
            $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME;
            try
            {
                $this->db = new PDO($dsn, DB_USER, DB_PASS);
            }

            catch ( Exception $e )
            {

                // If the DB connection fails, output the error
                die ( $e->getMessage() );
            }
        }
    }

?>
))))))
 
Erwin H

Erwin H

08/03/2013 10:53:09
Quote Anchor link
Maar waar zet je nu de error mode zoals boven aangegeven dan? Die staat hier niet bij.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.