0

我了解准备好的语句是如何工作的,我需要插入 200 万行,所以在这种情况下,使用准备好的语句对我来说是最好的选择。我的问题和问题是我在 row2 和 row3 上有一个复合唯一键,所以我可以在准备好的语句中使用 ON DUPLICATE KEY UPDATE 但是如果我希望使用条件并且仅在 lastupdated DATE 在比较日期之前进行更新时怎么办?如果没有准备好的语句,我只能在 ON DUPLICATE KEY UPDATE 中使用一个简单的 IF,但我似乎无法使用准备好的语句来实现它,因为变量是绑定的,并且将在创建准备好的语句后在循环中设置。

$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;
}
4

1 回答 1

0

我相信在这种情况下可以使用values()函数,因为它将返回在查询执行时通过占位符传递的实际值。

或者您可以简单地将相同的值绑定两次,第一次用于 VALUES 部分,第二次用于 UPDATE

于 2013-05-26T03:58:52.470 回答