2015-10-05 2 views
0

Я пытаюсь вставить дату, когда пользователь регистрируется, но не работает. Он ничего не вставлял, когда я добавлял NOW() в запрос. Если я удалю его, пользователь добавится в базу данных.Вставка даты и времени NOW() в базу данных с подготовленными операциями

Это нормальный запрос

$stmt = $pdo->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active'); 
$stmt->execute(array(
    ':username' => $_POST['username'], 
    ':password' => $hashedpassword, 
    ':email' => $_POST['email'], 
    ':active' => $activasion 
)); 

Я читал другие темы, и попытался это

$stmt = $pdo->prepare('INSERT INTO users (username,password,email,created,active) VALUES (:username, :password, :email, NOW(), :active'); 
$stmt->execute(array(
    ':username' => $_POST['username'], 
    ':password' => $hashedpassword, 
    ':email' => $_POST['email'], 
    ':active' => $activasion 
)); 

просто добавил created и NOW() на запрос, но ничего не вставить.

В чем может быть проблема?

+0

Почему вы не используете «CURRENT_TIMESTAMP()» в своей колонке? –

ответ

1

Вы нет закрывающей скобки на SQL вы подаете до prepare():

$stmt = $pdo->prepare('INSERT INTO users (username,password,email,created,active) VALUES (:username, :password, :email, NOW(), :active'); 

Это должно быть

$stmt = $pdo->prepare('INSERT INTO users (username,password,email,created,active) VALUES (:username, :password, :email, NOW(), :active)'); 

Как подсказывает @VincentDecaux, ваша проверка ошибок должна поймать это. Для включения исключений используйте следующие исключения:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

Да, проблема заключалась в закрытии круглых скобок. Спасибо за помощь. –

1

Первая попытка поймать ошибку:

try { 
    $stmt = $pdo->prepare('INSERT INTO users (username,password,email,created,active) VALUES (:username, :password, :email, NOW(), :active'); 
    $stmt->execute(array(
     ':username' => $_POST['username'], 
     ':password' => $hashedpassword, 
     ':email' => $_POST['email'], 
     ':active' => $activasion 
    )); 
} 
catch(Exception $e) { 
    echo 'Exception -> '; 
    var_dump($e->getMessage()); 
} 

Затем, вы можете использовать этот способ:

$stmt->execute(array(
    ':username' => $_POST['username'], 
    ':password' => $hashedpassword, 
    ':created' => date('Y-m-d H:i:s'), 
    ':email' => $_POST['email'], 
    ':active' => $activasion 
)); 
+0

У него не было никаких ошибок. У меня есть сообщение о том, что создание пользователя имеет успех, но не записывается в базу данных. Пробовал эхо-ошибки ... но нет –

+0

Хорошо, я поймаю ошибку - 'PDOStatement :: execute(): SQLSTATE [HY093]: Недопустимый номер параметра: число связанных переменных не совпадает с числом токенов' .. но почему? Насколько я понимаю, мне не нужно передавать параметр для 'NOW()'? –

1

Try тыс

$created = date("Y:m:d h:i:s"); 
$stmt = $pdo->prepare('INSERT INTO users (username,password,email,created,active) VALUES (:username, :password, :email, :created, :active'); 
$stmt->execute(array(
    ':username' => $_POST['username'], 
    ':password' => $hashedpassword, 
    ':email' => $_POST['email'], 
    ':active' => $activasion, 
    ':created' => $created 
));