我了解预处理语句是如何工作的,我需要插入200万行,所以在这种情况下,使用预准备语句对我来说是最好的选择。我的问题是我在row2和row3上有一个复合唯一键,所以我可以在准备好的语句中使用ON DUPLICATE KEY UPDATE,但是如果我希望使用条件,并且只有在最后更新的DATE在比较日期之前更新时才会更新?如果没有准备好的语句,我可以在ON DUPLICATE KEY UPDATE中使用一个简单的IF,但是我似乎无法用预处理语句实现它,因为变量已被绑定,并且将在创建预处理语句后在循环中进行设置。MYSQL PHP编写语句
$link = new mysqli(db_host,db_user,db_pass,db_db);
if($link->connect_errno){
echo "Failed to connect to MySQL.";
}
if(!($stmt = $link->prepare("INSERT INTO table(`id`,`lastupdated`,`col1`,`col2`,`col3`,`col4`,`col5`,`col6`,`col7`,`col8`,`col9`) VALUES (?,?,?,?,?,?,?,?,?,?,?)"))){
echo "Prepare failed: (" . $link->errno . ") " . $link->error;
}
如果你可以使用普通的语句中的'IF',你应该能够做同样的事情在准备好的声明。显示试图做这个广告的代码告诉我们你得到的错误。 – Barmar
如果你不得不加载数百万条记录,而且它不是一个反复发生的事情,我会说看看'LOAD DATA INFILE'的mysql语法会快很多。 – Orangepill