(Onverwachte?) cast to int MySQL
Mark PHP
29/07/2008 11:14:00Zojuist bij het selecteren van een record door middel van ID, viel me op dat MySQL de intval van de ingegeven ID neemt.
Ik heb even rondgezocht op het www, maar kan niets anders vinden dan dat dit expected behaviour is van MySQL 5.0 (MySQL tja...).
Wat code:
Ik vind dit nogal vreemd, er zijn natuurlijk wel oplossingen zoals het extenden van PDO en zo de prepare aanpassen, of voor integers sprintf gebruiken, maar dat bevalt me niet zo.
Andere ideeën voor MySQL?
Ik heb even rondgezocht op het www, maar kan niets anders vinden dan dat dit expected behaviour is van MySQL 5.0 (MySQL tja...).
Wat code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
$sql = 'SELECT id FROM table WHERE id = :id';
// 1
$stmt->bindParam(':id', 1, PDO::PARAM_INT);
//geeft record met ID 1 terug
// 2
$stmt->bindParam(':id', '1abc', PDO::PARAM_INT);
//geeft ook record met ID 1 terug
?>
$sql = 'SELECT id FROM table WHERE id = :id';
// 1
$stmt->bindParam(':id', 1, PDO::PARAM_INT);
//geeft record met ID 1 terug
// 2
$stmt->bindParam(':id', '1abc', PDO::PARAM_INT);
//geeft ook record met ID 1 terug
?>
Ik vind dit nogal vreemd, er zijn natuurlijk wel oplossingen zoals het extenden van PDO en zo de prepare aanpassen, of voor integers sprintf gebruiken, maar dat bevalt me niet zo.
Andere ideeën voor MySQL?
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
PHP hulp
21/11/2024 15:40:51Jelmer -
29/07/2008 11:28:00Leuk leesvoer, kwam ik toevallig gisteren tegen. Er staat onder andere in beschreven hoe PDO intern werkt, en wat daarvan de nadelen zijn.
Daarnaast vraag ik me af wat jij bedoelt met onverwacht gedrag: bindParam(':id', '1abc', PDO::PARAM_INT); Het lijkt mij niet onverwacht dat PDO (en niet de MySQL server) hier het argument naar een int cast.
Daarnaast vraag ik me af wat jij bedoelt met onverwacht gedrag: bindParam(':id', '1abc', PDO::PARAM_INT); Het lijkt mij niet onverwacht dat PDO (en niet de MySQL server) hier het argument naar een int cast.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Mark PHP
29/07/2008 11:39:00De vergissing die ik blijkbaar maak is dat de derde parameter van bindParam niet valideert, maar cast. Zie hier: http://www.sitepoint.com/forums/showthread.php?t=508503
Dat vind ik maar onhandig, het lijkt me netjes om de gebruiker een foutmelding of iets dergelijks te tonen als deze een foutief ID invult. Nu moet ik daar dus een extra check overheen gooien.
En die link ga ik nu maar eens lezen, thanks.
By the way, als ik rechtstreeks de query op SQL uitvoer, via MySQL-front, cast deze de string ook naar int.
Dat vind ik maar onhandig, het lijkt me netjes om de gebruiker een foutmelding of iets dergelijks te tonen als deze een foutief ID invult. Nu moet ik daar dus een extra check overheen gooien.
En die link ga ik nu maar eens lezen, thanks.
By the way, als ik rechtstreeks de query op SQL uitvoer, via MySQL-front, cast deze de string ook naar int.
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP