2010-08-12 2 views
0

다른 질문에서 nstrees으로 바뀌었고 스크립트를 통해 작업 해 왔습니다. 그것은 2005 년에 마지막으로 업데이트되었고 이후로는 다소 덜 익숙한 HTTP_POST_VARS과 같은 것들에 의존합니다. 나는 1 년도 안되는 시간 동안 PHP를하고 있었기 때문에 익숙하지 않았습니다.은 약간의 PHP5 이전 코드를 이해하기위한 간단한 도움이 필요합니다.

어쨌든, 코딩 스타일은 내 신인 눈에 이상한 것, 그리고 내가 두 번째 수행이 기능의 어떤 부분에 대한 의견 싶습니다 내가 해요 지점을 표시 위의 코드에서

// returns the first node that matches the '$whereclause'. 
// The WHERE clause can optionally contain ORDER BY or LIMIT clauses too. 
function nstGetNodeWhere ($thandle, $whereclause) { 
    $noderes['l'] = 0; 
    $noderes['r'] = 0; 
    $res = mysql_query("SELECT * FROM ".$thandle['table']." WHERE ".$whereclause); 
    if (!$res) { // problem area 1 
     _prtError(); 
    } else { 
     if ($row = mysql_fetch_array($res)) { // problem area 2 
      $noderes['l'] = $row[$thandle['lvalname']]; 
      $noderes['r'] = $row[$thandle['rvalname']]; 
     } 
    } 
    return $noderes; 
} 

// problem area x으로 확실하지는 않지만 그 밖의 모든 것은 원본 스크립트입니다.

PA1은 쿼리가 성공적으로 실행되었는지 여부를 확인하는 것입니까?

그리고 PA2, NetBeans에서 경고 메시지를 표시합니다. "우발적 할당이 가능합니다. 조건에서의 할당을 피해야합니다." ... 그래서 나는 즉시 =에서 ==으로 변경했고, 물론 스크립트를 깨뜨렸다.

생각해 보면, $res에 대한 다른 오류 검사 일 것입니다. 이번에는 실제로 일부 데이터가 반환되었는지 확인해야할까요?

마지막으로이 기괴한 PHP입니까, 아니면 그냥 너무 초록색입니까?

감사합니다. dude (tte) s!

답변

1

문제 영역 1은 정확히 사용자가 생각하는 것입니다. 쿼리가 성공적으로 실행되었는지 확인합니다. mysql_query에 대한 설명서를 참조하십시오 (Netbeans를 사용하므로 편집기에서 함수 이름을 강조 표시하고 F2 키를 눌러 인라인 팝업을 얻을 수도 있습니다). "반환 값"섹션을 찾고 있습니다. 그곳에는 오류가있을 때 FALSE (부울 FALSE)가 반환됩니다.

if (!$res) 

확인

== 이상적으로

if ($res == false) 

PHP는 변수에 대한 매우 편안 이후가 더 안전하기 때문에 당신이

if ($res === false) 

확인해야한다 검사와 동일 거짓.하지만 지금 당장 너와 혼동하지 말아라. 원할 경우 strong typing에 대한 내용을 읽어보십시오.

문제 영역 2는 매우 일반적이지만 Netbeans에서 경고를 표시합니다. 예. 그것은 mysql_fetch_array()의 값을 $ row에 할당하고, 인지를 true 또는 false로 확인하는 동시에 if() 내부의 다음 코드 블록에서 $ row에 동일한 값을 사용할 수있게합니다.

+0

PA2에 대한 자세한 설명을 가져 주셔서 감사합니다. 3 개의 게시판 중 유일하게 "게시판"을 얻는 데 도움이되었습니다. 나는 그 건설이 실제로 2 단계 조치 (할당, 수표)라는 것을 깨닫지 못했습니다. 지금 당장 말이야! – Drew

0

이 코드는 기사를로드 할 수 있다고 가정하고 '왼쪽 - 오른쪽'배열로 정렬하여 두 열 레이아웃으로 인쇄 할 수 있다고 가정합니다. 아마도. :)

예, PA1은 쿼리가 성공했는지 여부를 확인하고 있습니다. PA2는 단순히 실제 행을 가져 오는 중입니다.

0
if (!$res) { // problem area 1 

mysql_query는 SQL 쿼리 실행에 실패하면 false를 반환합니다. 이것은 기본적으로하지 않는 테스트 (!)가 false 이외의 값이기 때문에, 만약 시험은

if ($row = mysql_fetch_array($res)) { // problem area 2 

가에서 다음 행을 할당 코드의 인쇄 오류 분기는 mysql_query에 오류가 있다면 일치 실행합니다 결과 행을 $ row; 또는 결과 집합에 더 이상 행이 없으면 $ row를 false로 설정합니다.이 경우 "if test"가 false가됩니다.

관련 문제