2010-04-20 253 views
3

我有一個查詢爲什麼這個SQL不起作用?

public static function TestQuery(

$start=0, 
$limit=0){ 


$sql = " 
SELECT  count(*) AS total 
FROM db.table1 
JOIN db.table2 
ON  table1.fieldID = {$fieldID} 

AND table2.assigned = 'N'"; 



    $qry = new SQLQuery; 
    $qry->query($sql); 
    if($row = $qry->fetchRow()){ 
    $total = intval($row->total); 
    } 

return $total; 

} 

工作正常,但是當我添加了極限之下,則它不工作,並給了我錯誤

public static function TestQuery(

$start=0, 
$limit=0){ 


$sql = " 
SELECT  count(*) AS total 
FROM db.table1 
JOIN db.table2 
ON  table1.fieldID = {$fieldID} 

AND table2.assigned = 'N'"; 

//this fails 
if($recordlimit > 0) $sql .= "LIMIT {$startRecord}, {$recordLimit} "; 
// 
    $qry = new SQLQuery; 
    $qry->query($sql); 
    if($row = $qry->fetchRow()){ 
    $total = intval($row->total); 
    } 

return $total; 

} 

任何幫助將不勝感激

回答

4

認沽LIMIT前面的空格:

" LIMIT {$startRecord}, {$recordLimit} " 

沒有空格你sql將導致語法錯誤。

編輯:這是答案不正確!在LIMIT之前沒有空格的情況下MySQL不會出錯(但是,早期版本的phpmyadmin會錯誤地解析這樣的sql)。

+0

爲什麼會不會有沒有空間的錯誤? – 2010-04-20 18:53:04

+0

WHERE字段上的Mysql錯誤='N'LIMIT ... – webbiedave 2010-04-20 18:57:36

+0

@webbiedave:不適合我。你使用的是什麼版本的MySQL? – 2010-04-20 18:58:52

2

嘗試改變

if($recordlimit > 0) $sql .= "LIMIT {$startRecord}, {$recordLimit} "; 

if($recordlimit > 0) $sql .= " LIMIT {$start}, {$limit} "; 

它看起來像你的SQL是越來越壓扁在一起,應該得到一個不好的語法錯誤,而你又錯了(貌似)在變量名那裏。

3

你的變量被稱爲$限額和$開始:

if($limit > 0) $sql .= " LIMIT {$start}, {$limit} "; 
0

錯誤變量

if($recordlimit > 0) $sql .= "LIMIT {$startRecord}, {$recordLimit} "; 

解決 感謝

+1

如果馬克·拜爾斯的回答是正確的,你應該接受它。雖然我認爲我的和許多xxxi的變化也是必要的,以使其工作。 – webbiedave 2010-04-20 18:54:20

+0

請不要將問題的後續評論作爲答案發布。另外,如果答案提供了您的解決方案,請接受它。 – 2010-04-20 18:58:59