2010-08-05 3 views
0

PHP 페이지에서 쿼리를 입력하여 테이블에서 정보를 추출하는 코드를 작성하고 있습니다. 그래서 만약 내가 검색 상자에 SQL 문을 써주면, 그것은 나에게 결과를 줄 것이다.mysql_field_type을 사용하지 않고 mysql 열의 필드 유형을 추출하는 방법

문제점 : mysql 문은 사용자가 위에서 설명한대로 입력 할 수 있습니다. entries_date 및 unique_id와 같은 테이블에 걸쳐 반복되는 몇 가지 열이 있습니다. mysql_fetch_assoc을 사용하여 필드를 추출합니다. 그렇게하면 중복 열이 제거됩니다. 그런데 날짜 필드가 있는지 확인하고 그에 따라 사람이 읽을 수있는 "2010 년 1 월 4 일"형식으로 변경해야합니다. 이를 위해 나는 mysql_field_type에 의존한다. 문제가 있습니다.

mysql_field_type 중복 된 필드를 포함하여 모든 필드가 고려됩니다. 하지만 mysql_fetch_assoc에 의해 생성 된 테이블은 중복 필드를 사용하지 않습니다. 따라서 아래 코드에서 이해할 수 있듯이 일부 필드가 날짜 필드로 생각되고 잘못된 대답이 인쇄되고 있습니다.

while($search_now1=mysql_fetch_assoc($search_now)) 
      { 
     // echo "in here"; 
      $checkvalue=0; 
      echo "<tr>"; 
      foreach($search_now1 as $key => $value) 
      { 
       if($key=='type') 
       { 
        switch($value){ 
        case 1:$value="Student";break; 
        case 2:$value="Normal";break; 
        case 3:$value="Government";break; 
        case 4:$value="compl";break; 
        case 5:$value="compl-For";break; 
        case 6:$value="Foreign";break; 

        } 

       } 
       else 
       if($key=='city') 
       { 
        $value=city($value); 

       } 
       else if($key=='state') 
       { 
       $value=state($value); 

       } 
       else if($key=='country') 
       { 
       if($value!='IN') 
         {  
         $value=state($value); 
         } 
       } 
          // this is the error prone area $checkvalue is incremented at the bottom 
       else if(mysql_field_type($search_now,$checkvalue)=='date') 
       { 
        $value=changedate($value); 
       } 


       if($value) 
       { 
          echo "<td class=\""; 
          if($checkvalue<8) 
          { 
           echo "show"; 
          } 
          else 
           echo "none"; 

          echo "\"><span class=\"$key\">$value</span></td>"; 
       } 
       else if(!$value) 
          { 
            echo "<td class=\""; 
          if($checkvalue<8) 
          { 
           echo "show"; 
          } 
          else 
           echo "none"; 

          echo "\"><span class=\"$key\">-</span></td>"; 


       } 

      $checkvalue++; 
      } 

어떻게 수정합니까?

+0

** ** –

+0

검색 창에 SQL 문을 쓰면 안됩니다. 내 내부 데이터베이스에서 검색 할 수 있습니다. 하나만 검색합니다. mysql의 열을 비교하는 것이 정말 번거 롭다. 그들은 내 화면의 작은 창문에 나타난다. 이것은 나를 위해 일을 분명히하는 데 정말로 도움이되었습니다. – user165242

+0

누군가 나를 도와주세요! – user165242

답변

0

데이터베이스 테이블이나 SQL 쿼리를 보지 않고도 여기에서 무엇을하고 있는지보기가 약간 어렵지만 mysql_fetch_assoc()에서 반환 된 데이터 유형을보다 잘 제어하고 싶다고 생각합니다. 즉. 날짜, 문자열, 숫자 및 도시 이름 등 더 복잡한 유형을 구별 할 수 있습니다.

아마도 데이터베이스의 열을 로컬로 캐시하고 사전 (연관 배열) 조회를 수행 할 수 있습니다.

+0

세 개의 테이블에서 mysql_fetch_assoc을 사용할 때, 테이블에 자동으로 중복 된 필드가 없다 ... 이제는 각 필드의 필드 유형을 찾아서 보낼 수있다. 각각의 기능으로 mysql_fetch_assoc은 .. – user165242

+0

계속됨 - 그래서 | UID | NAME | ADDRESS | 표 1 및 | UID | ENTERED_DATE | 상태 | 국가 | 다른 테이블에서 전체 테이블을 가져온 다음 mysql_fetch_assoc은 UID | NAME | ADDRESS | ENTERED_DATE | STATE | COUNTRY |로 보입니다. mysql_field_Type은 UID | NAME | ADDRESS | UID | ENTERED_DATE | STATE | COUNTRY |로 간주합니다. 여분의 UID ..가 문제를 일으키는 것을 확인하십시오. 결과적으로 ENTERED_DATE는 변경된 기능으로 이동하지 않고 UID는 많은 문제를 일으키는 기능으로 들어갑니다. – user165242

1

DESCRIBE tablename mysql query를 사용해야합니다. 그러면 테이블의 모든 열에 대한 여러 속성이 나열됩니다. type 열은 열의 유형을 알려줍니다.

+0

다시 같은 문제로 이어질 것입니다. Describe 열에는 모든 열 유형이 표시됩니다. 중복 열을 제거하고자합니다. – user165242

관련 문제