【问题标题】:PDO - Insertion (INSERT INTO...) code doesn't workPDO - 插入 (INSERT INTO...) 代码不起作用
【发布时间】:2012-07-05 07:09:06
【问题描述】:

我正在尝试将当前日期/时间作为用户上次登录的时间插入数据库。由于某种原因,这不起作用。
在同一页面上运行的其他插入脚本运行良好,并且连接正常。
我使用相同的语法在整个站点中插入其他内容,所以我不明白有什么问题。
我可以保证在我输入密码时else 部分正在执行。

这是我正在谈论的一段代码。

if(!$pwVer){ 
     // code to execute if the password is incorrect.
} else {

    $dateT = date("Y-m-d H:i:s");

    $up_date = $con->prepare("INSERT INTO tbl_user_test (user_last_login) VALUES (:l_login)");
    $up_date->bindParam(':l_login', $dateT);

    $up_date->execute();

    validateUser($userid); //sets the session data for this user


    header("Location: cart.php");
    $con = null;
    die();
}

一些背景:

  • 如果密码正确,$pwVer 返回 `true`。
  • `tbl_user_test` 和 `user_last_login` 的编写方式与它们在数据库中的完全相同。

提前致谢!

【问题讨论】:

  • tbl_user_test 是否只有user_last_login 列?如果你不插入一些像user_id 这样的信息,这张表会伪装成什么?
  • 尝试将var_dump($up_date->errorInfo()); 放在$up_date->execute(); 行之后,并告诉我们它的含义。
  • @xdazz 谢谢!大声笑我完全忘记了这应该是用户特定的东西......我应该添加一个WHERE 部分!
  • 不,实际上这样也行不通。

标签: php mysql database date pdo


【解决方案1】:

我正在尝试将当前日期/时间作为用户上次登录的时间插入数据库。由于某种原因,这不起作用。

您的代码中没有可见的错误,因此应该执行它。一个可能的问题是 PDO 处于静默模式,它不会告诉您发生了什么错误或是否发生了错误。将 PDO 设置为失败并出现异常。

另外,不需要自己构建当前日期;你可以使用 SQL 的NOW()

<?php
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
try {
    $up_date = $con->prepare("INSERT INTO tbl_user_test (user_last_login) VALUES (NOW());");
    $up_date->execute();
}
catch( Exception $e ) {
    echo $e; exit;
}

header("Location: cart.php");
$con = null;
die();

【讨论】:

  • 谢谢!感谢您的回答,我解决了我的问题 :) 我认为问题在于我没有定义我真正想要更新的行。所以我使用了你的代码语法并将 sql 更改为 UPDATE + WHERE 子句。
【解决方案2】:

您是否尝试 NOW() 获取当前日期时间?

【讨论】:

    【解决方案3】:

    用这个检查一下

    $up_date->bindParam(':l_login', $dateT, PDO::PARAM_STR);
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多