2010-04-20 3 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

Put пробел перед ПРЕДЕЛОМ:

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

без пробела вы sql приведет к синтаксической ошибке.

Редактировать: Это ответ неправильная! MySQL не будет ошибкой без пробела перед LIMIT (однако более ранние версии phpmyadmin будут неправильно разбирать такой sql).

+0

Почему там будет ошибка без пространства? –

+0

Ошибки Mysql на поле WHERE = 'N'LIMIT ... – webbiedave

+0

@webbiedave: Не для меня. Какую версию MySQL вы используете? –

2

Try изменения

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

Если ответ Mark Byers правильный, вы должны его принять. Хотя я думаю, что мои и многие изменения xxxi также необходимы, чтобы заставить его работать. – webbiedave

+0

Пожалуйста, не оставляйте комментарии на свой вопрос в качестве ответов. Кроме того, если ответ предоставил ваше решение, примите его. –