1

を使用してデータを更新するのに苦労していPDOます。これらは私が試した2つのオプションです。ただし、実際にデータベースを更新したものはありません。

クエリ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'

2番目のオプションは正しいクエリを生成しますが、実際にはデータを更新しません。生成されたスクリプトを手動で実行できますが、それは機能しますが、を介しては機能しませんexecute()。私が間違っていることはありますか?私はまだ初めてなPDOので、簡単な修正かもしれません。

解決済み:受け入れられた回答の下にある私の最後のコメントを参照してください。

4

2 に答える 2

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でラップして、エラーを確認してください

于 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 に答える