1

我很难使用PDO. 这是我尝试过的两个选项。然而,没有人真正更新过数据库。

查询一:

$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,所以这可能是一个简单的修复。

已解决:请参阅我在已接受答案下的最后评论。

4

2 回答 2

2

获取连接:函数 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 中以查看错误

于 2012-08-03T18:42:10.287 回答
0

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

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

如果您使用的是 PDO,mysql_real_escape_string将无法正常工作。完全没有。它需要通过现有的连接mysql_connect。您的用户名值实际上是空白的。

于 2012-08-03T18:41:19.560 回答