在MySQL中存储数组,同时检查现有条目

时间:2015-10-21 19:59:32

标签: php mysql arrays

我有一个像这样的

的数据库表

测试

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 ”。

0 个答案:

没有答案