2013-06-20 155 views
0

我想使用PDO
我想更新约200行数据,每行10个字段,我使用了四个这里下面
连接到海量数据添加到MySQL数据库分贝是好的,我测试了一些成绩查询
领域使用的foreach,其工作方式也未尝不可填补的,我验证的内容
问题但被执行功能,执行提供了一个错误,没有数据被插入使用PDO的MySQL数据库更新海量数据

什么请做,现在代码

//set db 
$host = 'localhost'; 
$dbname = 'dbdata'; 
$attrs = array(PDO::ATTR_PERSISTENT => true); 
$dbHandle = new PDO("mysql:host=$host;dbname=$dbname",'dbdatatable','tblpwd'); 
$dbHandle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
//=================================================== 
//prepare sql 
$sql = "UPDATE TickersList SET field1=?, field2=?, field3=? WHERE field4=?"; 
$STH = $dbHandle->prepare($sql); 
//=================================================== 
//declare arrays 
$ufield1 = array(); 
$ufiled2 = array(); 
$ufiled3 = array(); 
$ufiled4 = array(); 
//=================================================== 
//fill arrays with data 
foreach($this->_data as $qty){ 
$ufield1 [] = $qty->data1; 
$ufield2 [] = $qty->data2; 
$ufield3 [] = $qty->data3; 
$ufield4 [] = $qty->data4; 
} 
//=================================================== 
//execute query - not working :(
$STH->execute($sql,$ufield1,$ufield2,$ufield3); 
//=================================================== 

回答

0

您的执行方法调用错误且位置错误。你应该这样做:

//fill arrays with data 
foreach($this->_data as $qty){ 

$params = array($qty->data1,$qty->data2,$qty->data3,$qty->data4); 
$STH->execute($params); 

} 
+0

Thx yr feedback hynner。这确实有效。不幸的是,这是直接的pdo执行,并且不会比传统的mysqlquery更快。 (对于200行数据为14秒) 我想使用为速度和安全性推荐的准备好的查询执行。任何想法? – Pavel

+0

显然你在做一件非常错误的事情。你使用哪个表引擎?我的猜测是InnoDB,这是写作慢。尝试使用MyISAM,如果你真的不需要InnoDB,如果你尝试寻找[这里](http://stackoverflow.com/questions/7585301/how-tos-for -mysql-innodb-insert-performance-optimization)一些优化技巧 – hynner

+0

是的,我正在使用MYISAM,但我会尽量优化。我想要pdo的原因是bc表有16000行,最新查询结果与新数据是200行。这意味着只有在80x14“或20分钟后大致刷新全表才能恢复。我选择了基于这个文件的pdo http://www.ilia.ws/files/quebec_PDO.pdf – Pavel