S.I.
S.I.

Reputation: 3375

Inserting datetime NOW() in database with prepared statements

I'm trying to insert date when user make registration but doesn't work. It didn't insert anything when I add NOW() to the query. If I remove it user is added into database.

This is normal query

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

I've read other threads and tried this

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

just added created and NOW() to the query but didn't insert anything.

What can be the problem?

Upvotes: 3

Views: 4210

Answers (3)

vhu
vhu

Reputation: 12788

You are missing closing parenthesis on the SQL you are feeding to prepare():

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

It should be

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

As @VincentDecaux suggests, your error checking should catch this. Use the following to enable exceptions, if that's what you prefer:

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

Upvotes: 5

Dinesh Belkare
Dinesh Belkare

Reputation: 631

Try ths

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

Upvotes: 2

Vincent Decaux
Vincent Decaux

Reputation: 10714

First try to catch your error :

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());
}

Then, you can use this way :

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

Upvotes: 1

Related Questions