2012-02-29 2 views
0

은 내가 내가이있는 열이있는 테이블이 나는 :(MySQL은 : NULL 값

를 MySQL의 모든 특이성을 이해하지 않기 때문에 확신 이상한 문제가 기존 업데이트 할 수 없습니다 NULL의 기본값 "TeamID"입니다. 해당 열의 값을 지정하지 않고 새 행을 추가하면 NULL입니다. 해당 행을 업데이트하려는 경우를 제외하고 다음 코드는 값을 변경하지 않는 것 같습니다. NULL (또는 오류의 원인) :

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
    $STH->execute($params); 

이 문제를 재 작성 : '비 - 널 (NULL) 값으로 TeamID을 덮어 쓰는 문제가를 이미 NULL 인 경우 코드 자체에 오류가있는 곳을 볼 수 없으므로 NULL 값과 관련이 있다고 생각합니다.

PHP/MySQL에서 코딩하는 한 가지 문제점은 PHPMyAdmin이 단계적으로 실행되기 때문에 코드를 단계별로 실행하여 데이터베이스의 내용을 동시에 볼 수 없다는 것입니다.

도움 주셔서 감사합니다.

+0

을 :

는 다음과 같이 따옴표를 제거하여 매개 변수 해석되어 있는지 확인하려면? –

+0

@BD. 네, 맞습니다. –

+0

그리고 나는 userID가 null이 아닌 것으로 가정합니까? –

답변

2

문제의 일부는 매개 변수 주위에 따옴표를 사용하는 것일 수 있습니다. params가있는 PDO 준비 문을 사용하고 있으므로 문자열을 인용 할 필요가 없습니다. PDO가 null을 나타내는 방법을 잘 모르겠지만 SET TeamID = '' 또는 SET TeamID = 'null'을 설정하려고 시도하는 상황이 발생할 수 있으며, 열 유형에 따라 유효하지 않을 수도 있습니다.

+0

큰 따옴표가 삭제되었습니다. 감사! –

1

은 약 PDO와 매개 변수의 이름 따옴표를 넣지 마십시오

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = ':teamID' WHERE UserID = ':userID';"); 
$STH->execute($params); 

UserID 문자열 ':userID' 동일하지 않습니다, 그래서 아무것도 업데이트되지됩니다. 그래서 TeamID이 NULL이 아닌 업데이트되고

$STH = $this->_db->prepare("UPDATE UserDetails SET 
      TeamID = :teamID WHERE UserID = :userID"); 
$STH->execute($params); 
+0

멋지게 설명했습니다. 감사! –

+0

MySql (기본 설정은?)은 1을 1과 같으므로 'UserID ='12345 '는 적절한 레코드를 반환합니다. 같은 일이 설정을 위해 간다. col의 타입이 int 인 경우에도 UPDATE ... SET col = '1'을 할 수 있습니다. 그러나 'UPDATE ... SET col =' ''같은 열에 오류가 발생합니다. – Farray