2012-04-13 2 views
1

다음 PHP 스크립트가 있습니다. 각 기사에 대한 의견을 세고 인쇄하고 싶습니다. 각 기사에 대한 ID가 이것에 의해 "리콜"할 수WHERE 절에서 PHP 변수를 사용하는 방법은 무엇입니까?

: 나는 WHERE 절에 추가하려고

<?php 
      $db =& JFactory::getDBO(); 
      $query = "SELECT COUNT(comments) AS totalcount WHERE contentid = ????? "; 
      $db->setQuery($query); 
      $count = $db->loadResult(); 
echo ($count); ?> 

: <?php echo $listing['Listing']['listing_id'];?> (이 돌아가 콘텐츠 ID 번호) 이제

, 나는이 스크립트를 가지고 this :

"... WHERE contentid = {$listing['Listing']['listing_id']}" 

그러나 $ count는 "0"을 반환합니다. 이 변수를 WHERE 절에 어떻게 추가합니까?

미리 감사드립니다.

+1

쿼리가 실제로 성공했는지 확인 했습니까? 생성 한 쿼리 문자열을 출력하고 수동으로 실행 해 보았습니까? –

답변

2

: 문자열의 경우

$query = "SELECT 
    COUNT(comments) AS totalcount 
WHERE 
    contentid = " . ((int) $listing['Listing']['listing_id']); 

:

$query = "SELECT 
    COUNT(comments) AS totalcount 
WHERE 
    contentid = " . mysql_real_escape_string($listing['Listing']['listing_id']); 

가장 큰 것은 피곤하기는의 SQL 주입입니다. 이것은 귀하의 질의를 안전하게합니다. int에 대한 명시 적 형변환은 값이 잘못되어도 int 값이 전달되도록합니다. 적어도 공격에 노출되지는 않을 것입니다.

+0

@Frist van Campen 간단하게 말하십시오! 너 락! 고맙습니다! – DavidF

1

는 데이터 유형에 따라

$query = "SELECT COUNT(comments) AS totalcount WHERE contentid = ".mysql_real_escape_string($listing['Listing']['listing_id']); 

$query = "SELECT COUNT(comments) AS totalcount WHERE contentid = '".mysql_real_escape_string($listing['Listing']['listing_id'])."'"; 

또는

을 시도해보십시오.

+0

문자열 인용 ... 동의 함. – mikevoermans

+0

예, 주사를 방지하기 위해 변수에 mysql_real_escape_string ($ foo)을 제안합니다. –

+0

사용하지 마십시오. 사용자 제공 변수를 추가하는 것은 끔찍한 습관입니다. –

2

sprintf를 사용하여 문자열을 이스케이프 처리하십시오. 정수의 경우

$query = sprintf("SELECT COUNT(comments) AS totalcount WHERE contentid = '%s'",mysql_real_escape_string($listing['Listing']['listing_id'])); 
관련 문제