Versio

(Onverwachte?) cast to int MySQL

Overzicht Reageren

Mark PHP

Mark PHP

29/07/2008 11:14:00
Quote Anchor link
Zojuist 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:
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 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

PHP hulp

25/05/2012 12:45:41
Gesponsorde koppelingen:
 
Jelmer rrrr

Jelmer rrrr

29/07/2008 11:28:00
Quote Anchor link
Leuk 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.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer rrrr
 
Mark PHP

Mark PHP

29/07/2008 11:39:00
Quote Anchor link
De 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.
Gewijzigd op 01/01/1970 01:00:00 door Mark PHP
 



Overzicht Reageren

Get Adobe Flash player