PRO预付声明中的DUPLICATE KEY UPDATE

时间:2013-04-14 17:40:54

标签: php mysql sql pdo

我正在使用PDO处理(MYSQL)数据库。当我保存结果时,这个SQL没有更新列值,它将创建一个带有新保存值的新行。我做的错误是什么。是否有任何人可以帮助我理解PDO的这种行为

$SQL =<<<'EOD'
CREATE TABLE IF NOT EXISTS pard_admin_config(
title varchar(255) NOT NULL,
online varchar(100),
offline varchar(100),
email varchar(100),
metades varchar(200),
metakey varchar(200),
copyright varchar(200),
pard_host varchar(100),
pard_database varchar(100),
username varchar(100),
password varchar(100)
)
EOD;

$pardConfig->query($SQL);


$stmt = $pardConfig->prepare("INSERT INTO pard_admin_config (title, online, offline, email, metades, metakey, copyright, pard_host, pard_database, username, password) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE 
title='?', online='?', offline='?', email='?', metades='?', metakey='?', copyright='?', pard_host='?', pard_database='?', username='?', password='?'");

$ConfigData = array($adminConfig->TITLE,
 $adminConfig->ONLINE,
 $adminConfig->OFFLINE,
 $adminConfig->EMAIL,
 $adminConfig->METADESCRIPTION,
 $adminConfig->METAKEYWORDS,
 $adminConfig->COPYRIGHT,
 $adminConfig->HOST,
 $adminConfig->DATABASE,
 $adminConfig->USERNAME,
 $adminConfig->PASSWORD);
$stmt->execute($ConfigData);

1 个答案:

答案 0 :(得分:0)

这不是PDO行为,而是mysql

您需要指定两次相同的值,或使用values()函数

ON DUPLICATE KEY UPDATE 
title= values(title), online=values(online), and so on

还要注意,将占位符放在引号中是没有意义的。