我有一个像这样的
的数据库表测试
UID | thing_id | thing
120151021 | 0000001 | some text here
UID,thing_id都是主键。 thing_id具有'UNSIGNED_ZEROFILL'属性。
使用以下数据库触发器
CREATE TRIGGER `Things_BEFORE_INSERT` BEFORE INSERT ON `things`
FOR EACH ROW BEGIN
SET NEW.thing_id=IFNULL((SELECT MAX(thing_id)+1 FROM test.Things WHERE UID=NEW.UID),1); -- If NULL set it to 1 as first thing_id for this UID
END
这可以确保无论何时在事物中创建新条目,它都会将 thing_id 增加1。
问题在于尝试插入数据数组并在重复位置替换条目。目前我一直在使用
$sql="INSERT INTO test.Things(UID,thing) VALUES (:uid,:thing1),(:uid,:thing2),(:uid,:thing3)";
$q = $dbh->prepare($sql);
$q->bindParam(':uid', $uid, PDO::PARAM_INT, 100);
$q->bindParam(':thing1', $thing1, PDO::PARAM_STR, 100);
$q->bindParam(':thing2', $thing2, PDO::PARAM_STR, 100);
$q->bindParam(':thing3', $thing3, PDO::PARAM_STR, 100);
$q->bindParam(':date', $date, PDO::PARAM_STR, 100);
//Execute
if (!$q->execute()) {
//Spit out any errors
echo "\nPDO::errorInfo():\n";
print_r($dbh->errorInfo());
} else {
echo "\nDone\n";
}
要静态添加条目,但我希望能够使用一系列条目执行此操作。此外,我需要检查数组中的位置,看看它是否是重复的thing_id。
例如。如果我在表格中有以下内容
UID | thing_id | thing
120151021 | 0000001 | An entry here
120151021 | 0000002 | Another entry here
120151021 | 0000003 | Third entry here
以及包含4个条目的以下数组
$entries[] = Array ( [0] => Entry1 [1] => Entry2 [2] => Entry3 [3] => Entry4 )
SQL语句将检查 thing_ids 的存在,替换事物1,2,3,并使用Entry4创建一个新行
但我几乎不知道从哪里开始。我想在SQL之前我也必须务实地将每个条目设置为“ bindParam ”。