2010-02-06 4 views
2

Disons que j'ai une requête:MySQL Query dans CodeIgniter avec session ID

" SELECT * FROM table 
     WHERE donor_id = " .$this->session->userdata('id') ." 
     GROUP BY rating" 

Cependant, il semble que je reçois une erreur de syntaxe SQL ici, en citant que $this->session->userdata('id') me donne « 25 », par exemple, au lieu de 25. Y at-il des solutions de contournement ici pour empêcher $this->session->userdata('id') d'être cité?

Merci.

Répondre

1

intval($this->session->userdata('id'))

1

En supposant que vous voulez dire qu'il est vous renvoie une chaîne au lieu d'un nombre entier, vous pouvez toujours essayer d'utiliser settype ou intval:

$var = '2'; 
settype($var, "integer"); 
$var = intval($var); 

Cependant, si vous voulez dire que les guillemets sont pour une raison quelconque codée en dur , vous pourriez faire une chaîne remplacer, si vous êtes sûr que la valeur ne contiendra pas des citations:

ech str_replace("'", "", "'2'"); // prints 2 
2

Dans CI, je fais tout le temps:

$id = intval($this->session->userdata('id')); 
$sql = " SELECT * ". 
     " FROM table ". 
     " WHERE donor_id = {$id} ". 
     "GROUP BY rating "; 
//process $sql below 

Créer requête comme ceci vous rendre plus faciles à repérer bug et empêchez injection SQL. Utilisez la concaténation lorsque vous avez besoin de diviser la requête en plusieurs lignes au lieu de faire une longue chaîne multiple pour éviter que la chaîne de requête réelle soit trop longue. Indenter le mot-clé SQL est de rendre plus facile la mise en place d'un bug logique et syntaxique.