嘗試使用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