Works great for me. For instance.
<?php $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); setup($pdo); echo 'client version: ', $pdo->getAttribute(PDO::ATTR_CLIENT_VERSION), "\n"; echo 'server version: ', $pdo->getAttribute(PDO::ATTR_SERVER_VERSION), "\n"; echo "before:\n"; foreach( $pdo->query('SELECT * FROM tmpTableName', PDO::FETCH_ASSOC) as $row ) { echo join(', ', $row), "\n"; } $status = 1; $_SESSION['userid'] = 'foo'; $params = array ( 'status' => $status, 'userid' => $_SESSION['userid'], ); $stmt = $pdo->prepare (' INSERT INTO tmpTableName (userId, status) VALUES (:userid, :status) ON DUPLICATE KEY UPDATE status = :status '); if ( ! $stmt->execute ( $params )) { print_r( $stmt->errorInfo ()); } echo "after:\n"; foreach( $pdo->query('SELECT * FROM tmpTableName', PDO::FETCH_ASSOC) as $row ) { echo join(', ', $row), "\n"; } function setup($pdo) { $pdo->exec(' CREATE TEMPORARY TABLE tmpTableName ( userId varchar(32), status int, unique key(userId) ) '); $pdo->exec("INSERT INTO tmpTableName (userId,status) VALUES ('foo', 0)"); $pdo->exec("INSERT INTO tmpTableName (userId,status) VALUES ('bar', 0)"); }
prints
client version: mysqlnd 5.0.10 - 20111026 - $Id: b0b3b15c693b7f6aeb3aa66b646fee339f175e39 $ server version: 5.5.25a before: foo, 0 bar, 0 after: foo, 1 bar, 0
on my car
source share