ryanpitts1
ryanpitts1

Reputation: 894

PHP PDO UPDATE not updating data

I am having a tough time updating data using PDO. These are the two options that i've tried. None has actually updated the database, however.

Query 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); just prints out UPDATE users SET dateLastLoggedIn = ? WHERE username = ?

Query 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); prints out UPDATE users SET dateLastLoggedIn = '2012-08-03 13:36:32' WHERE username = 'testuser'

The second option generates the correct query but it doesn't actually update the data. I can manually run the generated script and it works, but not through the execute(). Anything i'm doing wrong? I'm still new to PDO, so it may be a simple fix.

SOLVED: see my last comment under the accepted answer.

Upvotes: 1

Views: 517

Answers (2)

Vikram
Vikram

Reputation: 4190

getting connection : function getConnection(){ $dbhost="127.0.0.1"; $dbuser="application"; $dbpass="password"; $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() .'}}'; 
}

Also, try to wrap this in try catch to see the error

Upvotes: 2

ceejayoz
ceejayoz

Reputation: 180023

print_r($sth->queryString); just prints out UPDATE users SET dateLastLoggedIn = ? WHERE username = ?

That's what will happen with PDO prepared queries.

If you're using PDO, mysql_real_escape_string isn't going to work. At all. It requires an existing connection via mysql_connect. Your username value is effectively blank.

Upvotes: 0

Related Questions