2011-12-21 2 views
1
$query = "SELECT a.*, cc.name AS category, dd.ezcity AS proploc, ee.name AS statename, ff.name AS cnname, ss.dealer_name AS propseller, u.name AS editor" 

. "\n FROM #__ezrealty AS a" 

. "\n LEFT JOIN #__ezrealty_catg AS cc ON cc.id = a.cid" 

. "\n LEFT JOIN #__ezrealty_locality AS dd ON dd.id = a.locid" 

. "\n LEFT JOIN #__ezrealty_state AS ee ON ee.id = a.stid" 

. "\n LEFT JOIN #__ezrealty_country AS ff ON ff.id = a.cnid" 

. "\n LEFT JOIN #__ezrealty_profile AS ss ON ss.mid = a.owner" 

. "\n LEFT JOIN #__users AS u ON u.id = a.checked_out" 

. (count($where) ? "\n WHERE " . implode(' AND ', $where) : "") 

. if (isset ($_POST['idSearch'])) 

    . { " WHERE a.id = " . $_POST['idSearch'] ; } 

. "\n ORDER BY ". $order 

. "\n LIMIT $pageNav->limitstart, $pageNav->limit" 

; 

내가 돈은 :(여기에 잘못된 구문을 얻을 ,, 그리고 그것은 경우-문 앞에 같은 오류 예상치 못한 T_IF구문 분석 오류 : 구문 오류, 예기치 못한 T_IF

+0

'. ($ _ POST [ 'idSearch'])? "어디에서 a.id =". $ _POST [ 'idSearch'] : "\ n ORDER BY". $ order. "\ n LIMIT $ pageNav-> limitstart, $ pageNav-> limit ");'이것은 표시된 페이지뿐만 아니라 모든 페이지를 검색하는 올바른 해결책입니다. –

답변

1

if는 오직 진술 할 수있다 : 당신은 expression로 사용하고 있습니다. 아무 것도 반환하지 않으며 다른 문 내에서 사용할 수 없습니다.

당신은, 그러나, 정확히 수행 할 삼항 연산자를 사용할 수 있습니다.

. (isset ($_POST['idSearch']) ? " WHERE a.id = " . $_POST['idSearch'] : '') 

$_POST['idSearch']는 빈 문자열을, 그렇지 않으면 해당 문자열을 추가, 설정되어있는 경우 "라는를

주를이 위에서 작성한 코드에 눈부신 SQL 인젝션이 있기 때문에 실제로 코드를 살펴 봐야합니다. 누구든지 데이터베이스에서 임의의 코드를 실행할 수 있습니다. 입력 내용을 살균하고 준비된 문과 매개 변수를 사용하도록하십시오 쿼리를 사용하여 코드를보다 안전하게 만들 수 있습니다.

+0

SQL = SELECT. *, cc.name AS 범주, dd.ezcity AS proploc, ee.name AS 이름, ff.name AS cnname, ss.dealer_name AS propseller, u.name AS 편집기에서 jos_ezrealty를 LEFT JOIN으로 사용 jos_ezrealty_catg AS cc ON cc.id = a.cid LEFT JOIN jos_ezrealty_locality AS dd ON dd.id = a.locid 왼쪽 조인 jos_ezrealty_state ASe eid.id = a.stid 왼쪽 조인 jos_ezrealty_country AS ff ON ff.id = a.cnid LEFT JOIN jos_ezrealty_profile AS ss ON ss.mid = a.owner LEFT JOIN jos_users AS u u ON u.id = a.checked_out 여기서 a.id = ORDER BY a.id DESC LIMIT 0, 5 –

+0

나는 내가 어떻게 디버깅을해야 겠지만 내 생각에'$ _POST [ 'idSearch']'는 설정되었지만 비어 있습니다. 내가 틀렸을 수도있다. 당신은 정확하게 많은 세부 사항을 제공하지 않습니다 ... – lonesomeday

+0

그것은 비어 있습니다, 그것은 비어 있으면 아무것도하지 않고 특정 데이터가 아니라 모든 데이터를 검색합니다, 나는 하이퍼 링크로 게시물을 얻을 것 같아요 그리고 쿼리 문자열 :), thnx 모두 –

3

제거 (소수점) 반환 유지.. 은 if 문 자체가 문자열이 아니기 때문에 당신은 그것을 연결할 수 없습니다

2

이 작업을 수행하지 마십시오.

. if (condition) { value_if_true; } 

는 대신 이렇게 :

,
. (condition ? value_if_true : value_if_false) 
0

나는 당신이 삼항 연산자로이 켜려고 생각 :

. (count ...) 
. (isset($_POST['idSearch']) ? ' WHERE a.id = ' . $_POST['idSearch'] : '') 
. "\n ORDER BY" ... 
+0

왜 삼항 연산자가 나쁜가? –

+0

@Rocket 나는 그것이 있다고 생각하지 않지만 많은 개발자가 있습니다. 문제의 한 예는 사실 이후에 조건에 작업을 추가 할 수 없다는 것입니다. –

관련 문제