2012-06-30 105 views
2

聲明如何使用和/或在MySQL查詢使用PHP和Zend framework.for我現在用的這個:Zend框架,其中查詢

$db=Zend_Db_Table::getDefaultAdapter(); 
    $select=new Zend_Db_Select($db); 
    $select->from('users','*'); 
    $select->joinInner('rest', 'users.repository = rest.id',array('username')); 
    $select->where('username='.$rest.' and sold=0'); 
    return $db->fetchAll($select); 

是正確的方法是什麼?如果不是什麼正確的方法?

回答

3

您可以 '致電where()多次s到您的查詢:

$select->where('this = ?', 'myValue') 
     ->where('that = ?', 'myValue2'); 

這將轉化:

... WHERE this = 'myValue' AND that = 'myValue2' 

要將一個或多個OR添加' 添加AND s到您的查詢,使用orWhere()

$select->where('this = ?', 'myValue') 
     ->orWhere('that = ?', 'myValue2'); 

這將轉化爲:

... WHERE this = 'myValue' OR that = 'myValue2' 

注意

請務必使用?佔位符語法,因爲它是爲了防止SQL注入的簡單方法。

2

這是一種方式,但你應該使用?變量佔位符,以防止SQL注入:

$select=new Zend_Db_Select($db); 
$select->from('users','*'); 
$select->joinInner('rest', 'users.repository = rest.id', array('username')); 
$select->where('username = ? and sold=0', $rest); 

(爲「賣」,如果這有時也來源於一個PHP變量這樣做)

你也可以連接在一起,其中有多個where()呼叫條款或者orWhere()如果你想或代替和:

$select=new Zend_Db_Select($db); 
$select->from('users','*'); 
$select->joinInner('rest', 'users.repository = rest.id', array('username')); 
$select->where('username = ?' $rest); 
$select->where('sold = ?', 0); 

由於Zend_Db_Select對象使用流利的影響,你也可以寫這樣的:

$select=new Zend_Db_Select($db); 
$select->from('users','*') 
     ->joinInner('rest', 'users.repository = rest.id', array('username')) 
     ->where('username = ?' $rest) 
     ->where('sold = ?', 0); 
+0

謝謝大家,但是是什麼或?例如我想要這裏(fname ='ggg'和(post> 5 || thanks> 30)和age = 10) – Abadis

+0

最簡單的方法是'$ select-> where('fname =?','ggg') - > where('post> 5 OR thanks> 30);' –

+0

謝謝,但可能存在風險,感謝sql注入。因爲你看到他們像字符串傳遞,而他們是變量 – Abadis

0

以下內容將解決您的問題,請參閱PHP postgres Zend Framework Select query with WHERE 'AND' clause以獲取關於where()和orWhere()如何工作的更完整說明。

$db=Zend_Db_Table::getDefaultAdapter(); 
    $select=new Zend_Db_Select($db); 
    $select->from('users','*'); 
    $select->joinInner('rest', 'users.repository = rest.id',array('username')); 
    $select->where('username= ?',$rest);//multiple where() will use AND operator in query 
    $select->where('sold = ?', 0);//if you need the OR operator use the orWhere() method 
    return $db->fetchAll($select); 

回答關於問號(摘自手冊):

fetchAll($select, $value)//most of the Zend_Db methods follow this API

使用fetchall()方法: 第一個參數到該方法是包含的字符串SELECT 聲明。或者,第一個參數可以是類 Zend_Db_Select的對象。適配器自動將此對象轉換爲SELECT語句的 字符串表示形式

ie(?是$值的佔位符):您目前正在使用舊的語法
$select->where('id = ?', $id);
$select->orWhere('age > ?', $age);

,雖然它仍然可以工作,這種模式已經過時。