mysql kleine probleem
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = "SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM events";
?>
$sql = "SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM events";
?>
Maar zo wel:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = "SELECT
`event_id`, `event_title`, `event_desc`,
`event_start`, `event_end`
FROM `events`";
?>
$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:
Wat is de foutmelding die je te zien krijgt? Indien je die niet krijgt voeg eerst een foutafhandeling toe.
Wat zegt mysql_error? Ik denk zelf dat MySQL moeilijk doet met het DESC-veld en de gereserveerde namen.
Probeer die eens te hernoemen...?
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.
Zo doet die het ook
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$sql = "SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM `events`";
?>
$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
Laat je complete script (voor wat betreft het database deel) eens zien? Heb je nog andere clausules in je query?
Code (php)
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
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() );
}
}
}
?>
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
Code (php)
Dit levert de volgende string op:
Code (php)
1
2
3
4
2
3
4
SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM `events`WHERE event_id=:id LIMIT 1
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)
1
2
3
4
2
3
4
SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM eventsWHERE event_id=:id LIMIT 1
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.
@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
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
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 -
Francoi: Misschien toch de volgende keer je query even echo-en om te kijken of alles wel netjes aan elkaar wordt geplakt? :-)
veranderd naar $sql .= " WHERE event_id=:id LIMIT 1 ";
Dit helpt ook niet maar die try catch gebeuren is toch de foutafhandeling?
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)
1
2
3
4
5
6
2
3
4
5
6
<?php
SELECT
event_id, event_title, event_desc,
event_start, event_end
FROM evnts "
?>
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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$sql .= "WHERE event_start
BETWEEN '".$start_date."'
AND '".$end_date."'
ORDER BY event_start";
}
?>
$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?
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:
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:
Dan komen sql fouten als een exception in php terecht.
Gewijzigd op 08/03/2013 10:37:07 door Erwin H
$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?
Yep, probeer het eens, door die spatie weer weg te halen, krijg je dan wel de foutmelding?
Nee geen error gekregen, helaas
Da's vreemd, zou nu wel moeten komen. Voer eens een gewoon compleet foute query in, wat gebeurt er dan?
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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() );
}
}
}
?>
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() );
}
}
}
?>
Maar waar zet je nu de error mode zoals boven aangegeven dan? Die staat hier niet bij.