2015-10-05 113 views
0

我试图在用户进行注册时插入日期但不起作用。当我将NOW()添加到查询时,它没有插入任何内容。如果我删除它,用户将被添加到数据库中。将数据库中的datetime 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 
)); 

刚刚添加createdNOW()的查询,但没有将任何东西。

可能是什么问题?

+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

尝试的部份

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