2017-02-17 3 views
0

다음 코드는 수동으로 값을 1로 설정하면 예상 결과를 반환하는 $ dep 코드에서 변수를 사용하는 결과가 없습니다. 나는 작은 따옴표와 큰 따옴표를 따옴표없이 시도했다. 내가 예 부하 불구하고보고하고 내가 쿼리의 두 번째 줄에 구문 오류가 있습니다sql이 결과를 반환하지 않습니다.

$dep = 1; 
    if (!$names) { 
     $sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE 
      . ' WHERE dept_id='$dep' ORDER BY `sort`"; 
     $res = db_query($sql); 
+1

당신이 틀림없이'if (! $ names)'가 당신을 실망시키지 않는다면? –

+0

여기서 오류를 확인하십시오 –

+0

osticket 핵심 코드의 핵심 부분이며 완벽하게 작동합니다. dept_id = 1 일 때 작동하는 where 절을 추가하는 dept_id가 있지만 당연히 변경되었습니다. 위의 코드처럼 배열 –

답변

3

나는 귀하의 오류가 잘못된 인용 부호와 관련되어 있음을 확신합니다. 그 문제를 생성하므로, 코드에서 , 당신은, 당신은 (') 작은 따옴표를 사용하는

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE 
     . ' WHERE dept_id='$dep' ORDER BY `sort`"; 

후 FROM 쓸 수 있지만 전체 쿼리는 큰 따옴표 (")로 둘러싸여있다.

그것은해야한다 :

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ".TOPIC_TABLE 
     . " WHERE dept_id='$dep' ORDER BY `sort`"; 

편집 :. 당신이 심각 PDO 또는 다른 SQL 인젝션 방지 방법을 사용해야 지적 분실, 어떤 상황에서, 당신의 $의 출발 변수가 공공 양식을 통해 전송 될 수 있다면, 당신은 귀하의 DB를 최고의 c에 덤프시키는 것으로 끝날 수 있습니다. ase.

0

잘못하고있는 무슨을 볼 수 없습니다 - 쿼리에서 작은 따옴표를 원하는 경우에, 당신은 묶어야합니다 그것은 큰 따옴표의 모든 : 그런데

$sql = "SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM ' .TOPIC_TABLE 
      . " WHERE dept_id='$dep' ORDER BY `sort`"; 

, 정말 나쁜 생각과 SQL 인젝션 공격에 개방을 잎,이 같은 쿼리를 작성 문자열 연결을 사용 - 대신 준비된 문 및 매개 변수를 사용한다 .

+0

당신은 첫 번째 줄 따옴표 오류를 놓쳤습니다 .. FROM 후, 내 대답을 지적한대로 큰 따옴표가 있어야합니다. SQL 인젝션에 대해 동의합니다. –

+0

@MichaelDiPrisco : 예, 좋은 장소입니다. –

0

먼저 Fred -ii는 if 문이 제대로 실행되고 있는지 확인합니다. 그런 다음 dept_id이 정수 값인 경우 scaisEdge가 말한 것처럼 작은 따옴표가 필요하지 않습니다. 그렇지 않으면 SQL이 정상적으로 보인다. 전달되는 dept_id에 대한 데이터베이스에 증서 기록이 있는지 확인하십시오.

+0

코드 검토 @Michael Di Prisco는 귀하의 견적이 정확하게 일치하지 않는다는 점에서 좋습니다. 당신의 질문에 인용문을 사용하면 SQL은 다음과 같이 보입니다. 'SELECT topic_id, topic_pid, ispublic, isactive, topic, dept_id FROM '.TOPIC_TABLE . 'where dept_id ='1 'ORDER BY sort' 정확히 일치합니다. 올바른 테이블 이름을 concatting하지 않음 –

관련 문제