Проблема с подготовленными операторами PHP - PullRequest
0 голосов
/ 11 ноября 2011

Я получаю сообщение об ошибке

Column 'fname' cannot be 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));

??

1 Ответ

1 голос
/ 11 ноября 2011

Ваша схема, вероятно, имеет атрибут NOT NULL для fname, поэтому вы получаете нулевую ошибку.

Согласно вашему коду, вы, кажется, правильно связываете параметры, проверяли ли вы,$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...