2012-05-03 18 views
5

Kod yazıcısı kullanıyorum ve çoğu zaman (otomatik olarak bunlardan kaçıyor) sorgularım için etkin kayıt kullanıyorum, ancak bu sorgu değişken nedeniyle düzgün bir şekilde ona sığmıyor gibi görünüyor. Bu yüzden sorgunun nasıl manuel olarak kaçacağını bulmam gerek.SQL sorgusu kaçan + codeigniter

Codeigniter dokümanlar bu şekilde sorguları kaçan öneririz:

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")"; 

Benim orijinal sorgu

$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}'"; 

Benim sorgu

$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = '{$id}' VALUES(".$this->db->escape($user_language).")"; 

kaçan Ama sorun yaşıyorum getti sözdizimi doğru. Hata mesajları şunlardır:

  • PHP hata iletisi: Tanımsız değişken: USER_LANGUAGE
  • SQL hatası: hat 1
+0

Sorgunuzla bir şey eklemek mi yoksa seçmek mi istiyorsunuz? – Hajo

+0

SELECT. INSERT, Codeigniter belgelerinden. – chowwy

+0

cevabımı güncelledi, umarım bu sizin için çalışır:] – Hajo

cevap

12
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id); 

de sözdizimi yanlış ... yakın 'DEĞERLERİ (NULL)' eğer $ ID tarafından verilen kullanıcının dilini seçmek istediğinizde bu şekilde çalışmalıdır. sayılarla uğraşan

alternatif olacaktır:

$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id; 

CodeIgniter da "sorgu bağlamaları" olarak hazırlanmış ifadeleri destekliyor:

The secondary benefit of using binds is that the values are automatically escaped, producing safer queries. You don't have to remember to manually escape data; the engine does it automatically for you.

+0

Teşekkür ederim; işe yarıyor! Cevabını kabul ettim ve reddettim. Yan soru: Sorgunun kaçtığını onaylayabileceğim bir yol var mı? Kaçmak için birkaç sorgum var ve onları kontrol etmek istiyorum. – chowwy

+0

Güncelleme için teşekkürler. Bu yardımcı olur. – chowwy

+0

iyi hazırlanmış ifadeler kullanıyorum ve yıllarca kaçamıyorum. codeigniter bunları destekleyip desteklemediğini bilmiyorum: http://php.net/manual/en/pdo.prepared-statements.php – Hajo

4

Eğer kullanamazsınız demek neden karıştı CI ile Aktif Kayıt sınıfı, bu basit bir SQL çağrısıdır (aşağıdaki örnek method chaining kullanır):

$this->db->select('*')->from('user_language')->where('user_id', $id); 
$query = $this->db->get(); 

$id öğesinden sonra düzgün bir şekilde kaçtı ve herhangi bir enjeksiyonu azaltın. Şahsen AR numaralı telefonu kullanıyorum, hızlı bir şekilde etkin kod yazmamı ve SQL çağrılarıyla (özel sorgular) kötü şeyler hakkında endişelenmememi sağlar.

+0

Tamam, bu bir kepçedir. Yapamadım değil ama yöntem zincirlemesini duymamıştım. Değişken maddede nasıl belirtileceğini bilmiyordum. Çok müteşekkirim. – chowwy

+0

@chowwy, hepsi [Kullanıcı Rehberi] 'nde (http://codeigniter.com/user_guide/database/index.html), onun iyi örnekleriyle tam anlamıyla – Jakub

+0

Evet, bunu bir referans olarak kullanıyorum. Tekrar teşekkürler. – chowwy