2011-11-10 2 views
0

오류 메시지PHP Prepared statements 문제

Column 'fname' cannot be null 

실제로 null이 아닙니다. 나는 바인딩에 문제가 있다고 생각합니다. 나도 바인딩해야합니까()?

$stmt = $db->prepare("INSERT INTO `users` (`fname`, `mname`, `lname`, `email`, `pass`, `reg_dt`) VALUES (?, ?, ?, ?, ?, NOW())") or die(htmlspecialchars($db->error)); 

$rc = $stmt->bind_param("sssss", $fname, $mname, $lname, $email, $pass) or die(htmlspecialchars($stmt->error)); 

??

+0

당신은 테이블에 NOT NULL 사용하고, 타임 스탬프 수 있습니다. 또한 NOW()를 바인딩 할 필요가 없습니다. – user455318

+0

행 업데이트시 타임 스탬프를 업데이트하지 않으려 고합니다 – heron

+2

바인딩 한 변수의 컨텐츠를 제공 할 수 있습니까? – Marcus

답변

1

스키마에 fname에 대한 NOT NULL 속성이있을 수 있습니다. 이로 인해 Null 오류가 발생합니다.

코드에 따르면 올바르게 매개 변수를 바인딩하는 것으로 보입니다. $ fname이 실제로 값으로 표시되는지 테스트 했습니까?

명료하게하기 위해 (개인적으로 나는?,?,? 바인딩을 좋아하지 않습니다.) 대체 구조.

$sql = 
    "INSERT INTO `users` " . 
    "SET fname = :fname, " . 
    "mname = :mname, " . 
    "lname = :lname, " . 
    "email = :email, " . 
    "pass = :pass, " . 
    "reg_dt = NOW()"; 

$stmt = $db->prepare($sql); 

$stmt->bindValue(':fname', $fname, PDO::PARAM_STRING); 
$stmt->bindValue(':mname', $mname, PDO::PARAM_STRING); 
$stmt->bindValue(':lname', $lname, PDO::PARAM_STRING); 
$stmt->bindValue(':email', $email, PDO::PARAM_STRING); 
$stmt->bindValue(':pass', $pass, PDO::PARAM_STRING); 

아니면 돈이 ': 또한, 내가 그, 그냥 단지 실증 목적을위한 것이라는 것을, 사용 된 표시하지 않은 OP PDO는 mysqli 아니라고 말함으로써 다음 코드를받을 수 있습니다 t는 구조를 선호, 당신은 당신의 타임 스탬프 열에 CURRENT_TIMESTAMP 속성을 고려할 수 있습니다 :

`reg_dt` timestamp NULL default CURRENT_TIMESTAMP 
+0

나에게 PDO로 보였다. Sytax는 '완전히 틀린'것이 아니며 복사/붙여 넣기 할 때 후속 행에서 SET을 삭제하는 것을 잊어 버렸습니다. –

+0

@Phil : http://us3.php.net/manual/en/pdostatement.bindparam.php를 참조하십시오. 특히 INSERT 문법이 잘못된 것은 무엇입니까? 예 2의 MySQL 문서에 대한 링크를 통해 필자는 쉼표로 구분 된 col과 값의리스트를 SET 할 수 있다고 역설했다. 말할 것도없이 커맨드 라인에서 똑같은 질의를 실행했습니다. –

+0

진심으로 사과드립니다. MySQL이'INSERT' 문법의 배도를 몰랐습니다. PDO (나에게서 +1을 얻음)를 푸시 할 예정이라면 OP – Phil

관련 문제