尝试使用php的pdo中的预处理语句插入或更新sql。首先,我想到了使用REPLACE INTO
命令,但它给了我一个错误,因为我的索引上有一个外键。请阅读我必须使用INSERT...ON DUPLICATE KEY UPDATE
语法使其工作,但我不清楚如何使用准备好的语句来做到这一点。任何解决方案?谢谢。在MySQL中使用预处理语句插入或更新
的SQL是:
$sql="REPLACE INTO fn_currencies(id,short,name,buy,sell,date) VALUES (:id,:short,:name,:buy,:sell,:update)";
UPD:我正在Yii中此查询使用个人包装在PDO。 当我使用未命名参数,我得到这种类型的错误:
CDbCommand failed to execute the SQL statement: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens. The SQL statement executed was: INSERT INTO `fn_currencies` (id,short,name,buy,sell,date) VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE id=?,short=?,name=?,buy=?,sell=?,date=?
当我使用与插入和更新递延名字命名的参数是mentioned..I没有错误和没有数据插入我的数据库。 下面是DB模式:
CREATE TABLE IF NOT EXISTS `fn_currencies` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`short` varchar(4) NOT NULL,
`name` varchar(200) NOT NULL,
`buy` decimal(10,4) NOT NULL,
`sell` decimal(10,4) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
ALTER TABLE `fn_currencies`
ADD CONSTRAINT `FK_fn_currencies` FOREIGN KEY (`id`) REFERENCES `fn_operations` (`currency_id`);
我怀疑是让你感到困惑的是,你不能在一个准备好的语句中多次使用一个命名参数。这意味着你必须写一个例如INSERT INTO tablename(field1,field2)VALUES(:field1i,:field2i)ON DUPLICATE KEY UPDATE field1 =:field1u,field2 =:field2u'您必须复制您发送的数据。它稍微吸收编程,但它确实工作(只是测试它) – DaveRandom 2012-08-08 10:28:10
@DaveRandom咦?重复使用命名参数的工作很好,除非我的记忆让我感到非常失望。 – deceze 2012-08-08 10:35:39
@deceze ['不能在准备好的语句中两次使用同名的命名参数标记。](http://php.net/manual/en/pdo.prepare.php) – DaveRandom 2012-08-08 10:36:31