Php PRO预付费对账单中的重复密钥更新

Php PRO预付费对账单中的重复密钥更新,php,mysql,sql,pdo,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

我正在使用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);
$SQL=TITLE,
$adminConfig->ONLINE,
$adminConfig->OFFLINE,
$adminConfig->EMAIL,
$adminConfig->METADESCRIPTION,
$adminConfig->METAKEYWORDS,
$adminConfig->版权所有,
$adminConfig->HOST,
$adminConfig->DATABASE,
$adminConfig->USERNAME,
$adminConfig->PASSWORD);
$stmt->execute($ConfigData);

这不是PDO行为,而是mysql

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

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

还要注意,在引号中放置占位符没有意义

在重复密钥更新时,标题=值(标题),联机=值(联机),脱机=值(脱机),电子邮件=值(电子邮件),metades=值(metades),metakey=值(metakey),版权=值(版权),pard_主机=值(pard_主机),pard_数据库=值(pard_数据库),用户名=值(用户名),密码=值(密码)");这意味着创建另一个具有保存值的原始数据