2012-04-04 3 views
0

이 몇 가지에 대한 후 포맷 :변환에 실패

에 이상 나올 경우 내가 미리 미안 해요, 그래서이 사이트에 내 첫 번째 게시물입니다 이 문제에 대한 해답을 찾기 위해 인터넷을 검색하는 한 주 동안 나는이 웹 사이트를 시도해 보았습니다. 과거에 수없이 많은 도움을주었습니다.

어쨌든, 저는 PHP에서 PDO를 사용하여 프로젝트에서 MS SQL 데이터베이스와 상호 작용했습니다. 테이블 중 하나가 설정되는 방식은 근본적으로 거의 모든 숫자, datetime 및 문자 필드입니다. 내 문제는 날짜 필드입니다. 내가 쓰고있는 스크립트는 하나의 테이블에서 행을 복사하여 고유 한 ID로 다른 테이블에 넣습니다. 원래 테이블에있는 테이블의 데이터가 많이 변경되고 많은 테이블의 기본값이 NULL이기 때문에 오류가 발생했습니다. 필드의 NULL입니다.

이 문제를 해결하기 위해 NULL 값을 얻기 위해 상당히 많은 다른 작업을 시도하면서 모든 null 값을 0으로 대체하는 함수를 작성했습니다. 이것은 날짜 값을 제외하고는 잘 작동합니다. 삽입 문을 주석으로 처리 한 후 작동해야합니다. 그러나 "문자열을 datetime으로 변환 할 때 변환이 실패했습니다."라는 메시지가 나타납니다. 오류는 데이터베이스가 '0'을 datetime 값으로 변환 할 수 없기 때문일 수 있습니다.

어떻게 수정해야합니까?

NULL 값을 대체하는 함수입니다. 나는 또한 값을 NULL로 유지하면 데이터 형식 nvarchar를 숫자로 변환하는 중 오류가 발생한다는 점도 유의해야한다고 생각합니다. 오류.

function check_empty($field, $slno){ 
try{ 
    require("assets/dbcnct.php"); 

    $stmt = $DBH->prepare(" select ". $field ." from timeticket where slno = :slno "); 

    $stmt->bindParam(':slno', $slno); 

    $stmt ->execute(); 

    $result = $stmt->fetch(PDO::FETCH_ASSOC); 

    echo "<pre>"; 
    var_dump($result); 
    echo "</pre>"; 

    foreach($result as $key=>$val){ 
      if(empty($val)){ 
        $val = 0; 
      } 
    } 
    return trim($val); 

} 
catch(PDOException $e) { 
    echo "<pre>"; 
    echo $e->getMessage(); 
    echo "</pre>"; 
}  

}에 유래하는

+0

분명히 : 날짜가 'NULL'이면 대상 테이블에 무엇을 삽입해야합니까? 복사 할 때'NULL'을 빈 문자열이나'0'으로 대체해야합니까, 아니면 대상 테이블에'NULL' 값을 넣을 수 있습니까? – Basti

답변

0

에 오신 것을 환영합니다! :-) 기본 값을 설정

NULL

에 대한 당신은 NULL 경우, 열에 대한 기본 값을 설정

SELECT IFNULL(`myColumn`, 'default value for this column') as `myColumn` ... 

을 할 수 있습니다. 이 값이 0이 아닌 경우 myColumn 값을 반환하고 그렇지 않으면 NULL 값과 default value for this column 값을 반환합니다.

예 : 테이블의 날짜가 MySQL을에서 테이블 간의 NULL

SELECT IFNULL(`myDateColumn`, NOW()) as `myDateColumn` ... 

복사 튜플 인 경우 현재 날짜를 가져

나는 또한 당신이 튜플을 복사하는 PHP를 필요로하지 않는다는 것을 생각 한 테이블에서 다른 테이블로. MySQL의 INSERT INTO SELECT을 참조하십시오.

예 : NULL 값을 수있는 자동 증가 기본 키 id 및 열 datesourcedestination 모두 가지고 가정.

INSERT INTO `destination` (`id`, `date`) SELECT NULL, `date` FROM `source` 

이 테이블 source에서 모든 date의를 선택하고 새로 만든 각 튜플에 대한 새로운 ID를 생성 destination에 삽입. 또한 NULL 값을 유지합니다.

테이블 사이에 튜플을 복사 할 때 가장 적합한 방법입니다. MySQL과 PHP간에 실제로 데이터가 전송되지 않기 때문에 방대한 튜플의 경우에도 매우 빠릅니다.