2012-04-28 4 views
2

J'ai un peu un problème étrange qui m'a déconcerté. Tout ce que j'essaie de faire est d'exécuter une requête sur une table de base de données, mais pour une raison quelconque, CodeIgniter met des apostrophes dans la requête qui est ensuite briser la page.CodeIgniter insertion d'apostrophes dans la requête de base de données

Mon code ressemble à ceci:

$this->db->select("SUBSTRING(body,5)"); 
$this->db->order_by("date", "desc"); 
$this->data['query'] = $this->db->get_where('blog-entries', array('status' => 'P'), 3); 

Mais je reçois une erreur sur cette page:

Error Number: 1064 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (`blog-entries`) WHERE `status` = 'P' ORDER BY `date` desc LIMIT 3' at line 2 

La requête est en fait en cours d'exécution comme:

SELECT SUBSTRING(body, `5)` FROM (`blog-entries`) WHERE `status` = 'P' ORDER BY `date` desc LIMIT 3 

Comme vous On peut voir pour une raison quelconque que des apostrophes ont été ajoutées autour du nombre 5 dans la sous-chaîne. Si je supprime la sous-chaîne alors tout fonctionne et si je supprime les apostrophes et exécute la requête directement sur ma base de données, cela fonctionne aussi.

Est-ce que quelqu'un a eu des idées pour expliquer pourquoi cela peut se produire ou avoir une solution?

Votre aide serait grandement appréciée.

Un grand merci,

G.

+0

Il s'agit en fait de back-ticks ajoutés, pas d'apostrophes. Juste pour clarifier. – MichaelRushton

+0

Ajoute 'FALSE' en tant que second paramètre, comme ceci' $ this-> db-> select ("SUBSTRING (body, 5)", FALSE); 'le réparer? Cela devrait arrêter CodeIgniter en ajoutant des backticks. – jleft

+0

c'est pourquoi je déteste ces constructeurs de requêtes stupides, faisant des requêtes simples dans des blocs de spaghettis haut-écran –

Répondre

5

Utilisez ceci:

$this->db->select("SUBSTRING(body,5)", FALSE); 

Par défaut, Codeigniter essaie de rajouter-tiques où il juge pertinent. Parfois, il les ajoute là où il ne devrait pas. Passer le FALSE comme second paramètre l'empêche de le faire.

+0

Merci beaucoup pour votre réponse. Cela se débarrasse de l'erreur de base de données, cependant, il ne semble pas exécuter la requête car j'obtiens une erreur sur la page où j'écris les champs de la requête: –

+0

Je reçois le message d'erreur "Message: Undefined property". Je vais essayer d'attraper le champ 'body' et de le soustraire directement au champ du contrôleur plutôt qu'à toute la requête. –

+0

En fait, je pense que je réalise ce qui se passe. J'ai juste besoin d'ajouter les autres champs dans le SELECT! –

Questions connexes