PHP PDO UPDATE不更新数据

时间:2012-08-03 18:36:31

标签: php pdo

我很难使用PDO更新数据。这是我尝试过的两个选项。但是,实际上没有更新数据库。

查询1:

$dateLastLoggedIn = date("Y-m-d  H:i:s");
$username = mysql_real_escape_string($_POST['User']);
$sth = $dbh->prepare("UPDATE users SET dateLastLoggedIn = ? WHERE username = ?");
$sth->execute(array($dateLastLoggedIn,$username));

print_r($sth->queryString);只打印出UPDATE users SET dateLastLoggedIn = ? WHERE username = ?

查询2:

$dateLastLoggedIn = date("Y-m-d  H:i:s");
$username = mysql_real_escape_string($_POST['User']);
$sql = "UPDATE users SET dateLastLoggedIn = '".$dateLastLoggedIn."' WHERE username = '".$username."'";
$sth = $dbh->prepare($sql);
$sth->execute();

print_r($sth->queryString);打印出UPDATE users SET dateLastLoggedIn = '2012-08-03 13:36:32' WHERE username = 'testuser'

第二个选项生成正确的查询,但实际上并不更新数据。我可以手动运行生成的脚本,但它可以正常运行,但不能通过execute()运行。我做错了什么?我还是PDO的新手,所以这可能是一个简单的修复。

已解答:请在接受的答案下查看我的上一条评论。

2 个答案:

答案 0 :(得分:2)

获得连接:      function getConnection(){         $ DBHOST = “127.0.0.1”;     $ DBUSER = “应用程序”;     $ DBPASS = “密码”;     $ DBNAME = “ABC”;         $ dbh = new PDO(“mysql:host = $ dbhost; dbname = $ dbname”,$ dbuser,$ dbpass);
    $ dbh-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);     }

try {
  $dbh = getConnection();

  $sth = $dbh->prepare("UPDATE users SET dateLastLoggedIn = :dateLastLoggedIn  WHERE username = :username ");
  $sth->bindParam('dateLastLoggedIn',$dateLastLoggedIn);
  $sth->bindParam('username',$username );
  $sth->execute();
  $dbh = null; // after done
} catch(PDOException $e) {// simple exception handling
        error_log($e->getMessage(), 3, '/var/tmp/php.log');
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
}

另外,尝试将其包装在try catch中以查看错误

答案 1 :(得分:0)

  

的print_r($ sth->的queryString);只打印出UPDATE用户SET dateLastLoggedIn =?用户名=?

这就是PDO准备的查询会发生的事情。

如果您正在使用PDO,则mysql_real_escape_string无效。完全没有。它需要通过mysql_connect建立现有连接。您的用户名值实际上是空白的。