我很难使用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
的新手,所以这可能是一个简单的修复。
已解答:请在接受的答案下查看我的上一条评论。
答案 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
建立现有连接。您的用户名值实际上是空白的。