2011-09-21 2 views
0

켜져되지 않습니다. 쿼리를 울리고 PhpMyAdmin에서 시도한 결과를 반환합니다.없음 쿼리 결과는 내가 간단한 쿼리 및 간단한 가져올 행이

인쇄 $row 여전히 아무것도 반환하지 않습니다. fetch assoc으로 시도하고 배열도 가져옵니다. error_reporting(E_ALL);을 켜면 인쇄물이 배열을 반환합니다. 오류 보고서를 비활성화하면 아무 것도 반환하지 않습니다. 무엇이 문제 일 수 있습니까?

+0

http://www.php.net/manual/en/function.mysql-num-rows .php – hakre

+2

print_r()은 디버깅 도구가 아니며 error_reporting의 영향을받지 않습니다. 일반 print_r() 대신 디버거 (xdebug 또는 유사)의 출력이 표시되지 않습니까? 또한, 대신에 var_dump()를 쓰고, mysql_query() 후에 die (mysql_error())를 시도하십시오. –

+0

mysql_errors가 없다고 error_reporting을 사용하고 있습니다. $ quer에 대한 var_dump는 (mysql result) 유형의 resource (57)를 반환하고 $ row에 대한 var_dump는 bool (false)을 반환합니다. – wintercounter

답변

0

이 문제를 디버깅하는 데 도움이 될 것입니다 될 수있다

$query = "select COALESCE(sum(impression),0) as imps,COALESCE(sum(clk_count),0) as clks,COALESCE(sum(money_spent),0) as monspen,time from `$table_name` where $uid_str $aid_str $timestr time=$temp_time_main group by time order by time"; 

$result = mysql_query($query) || die('Error: ' . mysql_error()); 

while (($row=mysql_fetch_row($result)) !== false) { 
    var_dump($row); 
} 
+0

내가 말한대로 MySQL 오류가 없습니다. 내 원래 게시물에 대한 내 의견을보세요. – wintercounter

+0

확인. 그런 다음 ini_set ('display_errors', 1) 설정을 시도하십시오. 브라우저에서 스크립트를 실행 한 후 소스 HTML 코드를 살펴보십시오. 어떤 오류가 있습니까? – classic

+0

MySQL 오류가 없습니다 (지금 20 번 말하는데 성가시다.). 이 작업은 : error_reporting (E_ALL); $ res = mysql_query ($ q); $ row = mysql_fetch_row ($ res); error_reporting (0); 그것은 shity 방법이지만, 그것은 내가 수정을 찾을 때까지 지금 일하고있다. – wintercounter

2

이 쿼리에 잘못된 것들을 많이 있습니다

$quar=mysql_query("SELECT 
        COALESCE(sum(impression),0) as imps 
        ,COALESCE(sum(clk_count),0) as clks 
        ,COALESCE(sum(money_spent),0) as monspen 
        ,time 
        FROM `$table_name` 
        WHERE $uid_str $aid_str $timestr time=$temp_time_main 
        GROUP BY time 
        ORDER BY time"); 

1이 곳 절은 무엇을 의미 하는가은? 절은 일반적으로 양식입니다

WHERE $uid_str $aid_str $timestr time=$temp_time_main 

: 삽입 인용 부호가 $가 바르 field1 = 'A' AND field2 = 'B' AND field3 > 'C'

2는이 값이있는 경우 작은 따옴표 '에 바르 모든 $ 나쁜 나쁜 생각

서라운드입니다 , 열 또는 테이블 이름 인 경우 백 슬릿에 `이 있습니다.
그런 식으로 $ var에 공백이 있거나 MySQL을 트립 할 수있는 다른 것들이 있다면 쿼리는 폭탄을 사용하지 않을 것입니다.
또한 vars를 인용하지 않으면 mysql_real_escape_string()이 작동하지 않습니다.
그러나 동적 테이블 이름을 사용하면 해당 포인트가 음소거됩니다 (아래의 3 번 참조).

3 개 동적 테이블 또는 열 이름은
가 열/테이블 이름이 유효한지 확인하는 화이트리스트를 사용하여 일이 기다리고 SQL 주입입니다. How to prevent SQL injection with dynamic tablenames?

4 귀하의 COALESCE 잘못 같습니다
이 질문을 참조하십시오.

심지어 하나의 null 행이 0에 합계를 되돌아갑니다 내가 대신이 코드를 사용하는 것이 좋습니다 :

.... 
SUM(COALESCE(impression,0)) as imps 
.... 
+0

다른 변수를 기반으로 WHERE 절을 생성하는 변수는 쿼리 나 쿼리에 대해 걱정할 필요가 없습니다. 간단한 SELECT * – wintercounter

+1

@wintercounter를 사용하더라도 문제가 계속 발생하므로 걱정할 필요가 ** 있습니다. 고속도로를 달릴만큼 충분히 큰 보안 구멍입니다. – Johan

+0

여기에 :'uid' = '10 '<- 변수가 이것을 반환하면 다른 두 개는이 경우 비어 있습니다. 이제 당신은 내가 아무렇지도 않게 말한 이유를 알 수 있습니다. 내 쿼리에서 따옴표를 사용하고 있습니다 ... – wintercounter