Zend PHP, nasıl bir sorgu için bir değişken kaçmak için?

3 Cevap php

im Zend Framework bazı sorguları yapıyor ve ben hiçbir SQL enjeksiyon biçimlerinin sonraki tür mümkün olduğundan emin olmak gerekir. Ben mysql_escape (önerilmez) kullanımı ve alışkanlık tüm işleri yapabilir. I real_mysql_escape kullanmaya çalışırsanız alışkanlık veritabanı ile conection kapmak mümkün olacak ve ben zend_filter sorunu çözmek nasıl bulamıyor.

(Simplied) yaptığını sorgu im sonraki sintaxes var:

	$db = Zend_Registry::get('db');	
	$select = "SELECT COUNT(*) AS num
				FROM message m
				WHERE m.message LIKE '".$username." %'";
	$row = $db->fetchRow($select);

Bu çerçevede SQL enjeksiyonu önlemek için en iyi yolu nedir?

3 Cevap

Kolay:

$db->quote($username);

Yani:

   $username = $db->quote($username . '%');
   $select = 'SELECT COUNT(*) AS num
                                FROM message m
                                WHERE m.message LIKE ' . $username;
   $row = $db->fetchRow($select);
$sql = 'SELECT * FROM messages WHERE username LIKE ?';
$row = $db->fetchRow($sql, $username);

Reference, http://framework.zend.com/manual/en/zend.db.html

Bir model ile çalışırken kullanabilirsiniz:

$bugs = new Bugs();
$row = $bugs->fetchRow($bugs->select()->where('bug_id = ?', 1));