2009-03-09 3 views
1

PHP를 사용하여 웹 사이트를 만들고 있는데 SQL 쿼리에 문제가 있습니다.SQL 쿼리로 인한 페이지 비우기

$dataArray = array(); 
$result = mysql_query("SELECT * FROM test WHERE web_id='$websiteID'") 
    or die(mysql_error()); 

while ($row = mysql_fetch_array($result)) { 
    $k = $row['kfoo']; 
    $v = $row['vbar']; 
    $dataArray[$k] = $v; 
} 

코드가 있어야하지만 페이지가 공백으로 표시됩니다 (즉, 모두 흰색으로 표시됨). 나는 두 번 확인했고 web_id은 분명히 정확한 이름과 대소 문자를 구별합니다.

예를 들어, 'foo'(기본적으로 web_id 이외의 다른 것)로 변경하면 페이지가 표시되지만 "where clause '에"Unknown column'foo '라는 오류 메시지가 표시됩니다. ".

아무도이 문제를 일으킬 수있는 아이디어가 있습니까? 저는 여기에 테이블 테스트를 만드는 코드입니다 : 여기에 몇 가지 답변을 바탕으로

$dataDB = "CREATE TABLE test 
(
    data_id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(data_id), 
    web_id INT, 
    kfoo TEXT, 
    vbar TEXT 
)"; 

mysql_query($dataDB,$con); 

업데이트

, 나는 약 $ websiteID에서 따옴표를 제거하고

error_reporting(E_ALL); 
ini_set('display_errors', 1); 
를 사용하여 오류를 표시

이것은 이전에 구문 오류가 있었음을 포함하여 많은 오류를 표시했습니다. 그러나 많은 오류가 남아 있고 그들은 나에게별로 의미가 없습니다. 내가지고있어 오류가 같은 모두

function getOutputSQL($websiteID,$userInput) { 
$result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)){ 
    $url = $row['url']; 
    $exp = $row['exp']; 
    $output= $row['textPrint']; 
    $endUrlStart = $row['outUrlStart']; 
    $endUrlEnd = $row['outURLEnd']; 

    $image = $row['image']; 
    $print = $row['print']; 
    $post = $row['post']; 

    $dataSource = $row['dataSource']; 
    $dataSourceName = $row['dataSourceName'];   

    } 

    // construct array of data names and values 
    $dataArray = array(); 
    $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") 
    or die(mysql_error()); 

    while ($row = mysql_fetch_array($result)) { 
    $k = $row['kfoo']; 
    $v = $row['vbar']; 
    $dataArray[$k] = $v; 
    } 

    // construct array of expressions and replacements 
    $result = mysql_query("SELECT * FROM regex WHERE web_id=$websiteID"); 
    $expArray = array(); 

    while ($row = mysql_fetch_array($result)) { 
    $e = $row['ex']; 
    $r = $row['re']; 
    $expArray[$e] = $r; 
    } 

    return getOutput($userInput,$url,$exp,$output,$endUrlStart, 
    $endUrlEnd,$dataSource,$dataSourceName,$post,$image,$print, 
    $expArray,$dataArray); 
} 

-

공지 사항 : : 여기 내 방법에 대한 전체 코드의 정의되지 않은 변수 : /home/daniel/web/resultsTest.php의 출력에 라인 (113) "

URL을 여러 번 반복

가, 특급, 출력, endUrlStart는, endUrlEnd은,은 dataSource가의 dataSourceName은, 게시물, 이미지 및 인쇄 라인 (113)이 큰 리턴 라인입니다.

이 변수가 정의되었다고 말할 수있는 한, 다른 페이지에 표시 할 수 있기 때문에 테이블이 비어 있지 않다는 것을 알고 있습니다.

정렬 된를 해결. 문제는 실제로 내 코드의 다른 부분에있었습니다. getOutputSQL을 잘못 호출하고 있었지만 지금 수정했습니다!

답변

2

일반적으로 PHP의 빈 페이지는 비활성화 된 error notifications을 나타냅니다. 처음에는 .htaccess 또는 php.ini를 통해 활성화해야합니다.

진술 : 내가 아는 한 정수는 SQL에서 인용해서는 안됩니다.

+0

인용 부호가있는 정수는 아프지 않습니다. – Tomalak

2

나는 실제 코드가 실제로 무엇을 넣을 것이라고 기대한다. 만약 이것이 모든 코드라면 아무런 오류가 없을 때 아무 것도 출력되지 않는다. (에코 나 프린트는 템플릿이 아니다.)

error_reporting과 display_errors가 모두 설정되었는지 확인하십시오. 스크립트 상단에서 다음을 사용하여이 작업을 수행 할 수 있습니다.

error_reporting(E_ALL); 
ini_set('display_errors', 1); 

그런 식으로 모든 오류를 확인할 수 있습니다.

편집
PHP는 치명적인 오류, 경고 및주의 사항을 포함하여 오류의 여러 유형을 가지고 있습니다. 주의 사항은 정의되지 않은 변수 또는 비추천 함수를 사용할 때이를 무시할 수 있음을 알려줍니다.

error_reporting(E_ALL^E_NOTICE); 

그런 다음 실제 오류 (경고 및 치명적 오류) 만 표시됩니다.

echo "<pre>"; 
var_dump($userInput); 
var_dump($url); 
//etc. 
echo "</pre>"; 

을하고 변수가 정말 설정되어 있는지 확인 :


그런 다음 그 변수는 진정으로 해제되어 더 많은 편집, 당신은 getOutput을 (호출하기 전에) 이런 일을하려고합니다.

+0

이 오류는 노출 된 오류가 아니며 어느 것도 나에게 의미가 없습니다. 새로운 문제로 질문을 업데이트했습니다. – Daniel

+0

내가 Notices를 당신이 제안하는 방식으로 억압하면 나는 단순히 빈 페이지를 얻는다. – Daniel

+0

변수가 설정되었지만 문제를 발견했습니다. getOutputSQL을 호출하는 방법과 관련이 있습니다. – Daniel

1

대신을 시도해보십시오

$dataArray = array(); 
if(is_numeric($websiteID){ 
     $result = mysql_query("SELECT * FROM test WHERE web_id=$websiteID") or die(mysql_error()); 

     while ($row = mysql_fetch_array($result)) { 
       $k = $row['kfoo']; 
       $v = $row['vbar']; 
       $dataArray[$k] = $v; 
     } 
} 

공지 사항 난 ''는 websiteID 변수 주위에 제거. 이것은 mysql이 그것을 문자열로 취급하지 않고 int로 처리한다는 것을 의미한다. 이는 mysql 테이블 생성시에 지정한 것이다. 또한 웹 사이트 ID가 숫자인지 확인합니다. 그렇지 않은 경우 SQL 쿼리를 수행 할 때 아무런 의미가 없습니다. 결과가 0이됩니다. 이것은 SQL 인젝션을 방지합니다.

0

내부 루프를 정의하는 변수는 루프의 끝에서 소멸됩니다. 즉, 첫 번째 while 루프에서 생성 한 출력 변수는 루프 이후에 존재하지 않습니다. while 루프 외부에서 정의한 다음 루프 내부의 값을 설정해야합니다.

function getOutputSQL($websiteID,$userInput) { 
$result = mysql_query("SELECT * FROM websites WHERE websiteID=$websiteID") 
    or die(mysql_error()); 
    $url = ""; 
    $exp = ""; 
    $output = ""; 
    //... etc for all the other variables you need in the function at the end. 
    while ($row = mysql_fetch_array($result)){ 
    $url = $row['url']; 
    $exp = $row['exp']; 
    $output= $row['textPrint']; 
    $endUrlStart = $row['outUrlStart']; 
    $endUrlEnd = $row['outURLEnd']; 

    $image = $row['image']; 
    $print = $row['print']; 
    $post = $row['post']; 

    $dataSource = $row['dataSource']; 
    $dataSourceName = $row['dataSourceName'];     

    } 
    // the rest of your function... 
+0

나는 이것을 시도하고 페이지가 다시 공백으로 나타났다. 이상한 일이 벌어지고 있습니다. – Daniel

관련 문제