2011-11-10 41 views
0

我收到錯誤消息PHP編寫的語句發出

Column 'fname' cannot be null 

其實,這是不爲空。我認爲綁定有問題。我是否也需要綁定NOW()?

$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屬性,這就是您獲取空錯誤的原因。

根據你的代碼,你似乎正確地綁定了參數,你測試過,看看$ fname實際上是一個值嗎?

一個替代的結構,爲了清晰起見(我個人不喜歡?,?,?綁定)。另外,讓我說這是PDO,而不是庫MySQLi,該OP沒有表明其正在使用,那它僅僅是用於說明目的晉級下面的代碼:

$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); 

或者,如果你不」您可以考慮在您的時間戳列中添加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」語法有什麼特別的錯誤?你到MySQL文檔的鏈接,例如#2備份,我可以做一個'SET',然後用逗號分隔cols和values列表。更不用說我只是從命令行運行相同的查詢來確保。 –

+0

我真誠的道歉。沒有意識到MySQL對'INSERT'語法的混淆。如果你打算推PDO(從我那裏得到+1),你可能需要解釋一下,它與OP – Phil