BEGIN,INSERT,COMMIT with ON DUPLICATE KEY UPDATE

时间:2015-08-27 14:55:10

标签: mysql

我有两张桌子:

1- beoordelingen

2 - sterren

我需要更新 表beoordelingen 中的3个值和插入新值到 table sterren

我该怎么做?

ON DUPLICATE KEY无效,无法在任何地方找到如何操作。

$sql=$dbo->prepare("BEGIN;INSERT INTO   beoordelingen(beoordelingid,userid,werkid,inlijn,
sjabloon,conclusie,save)

VALUES ('$beoordelingid','$user','$werkid','$inlijn','$sjabloon','$conclusie','0')

ON DUPLICATE KEY UPDATE 
beoordelingid=VALUES(beoordelingid),userid=VALUES(userid), werkid=VALUES(werkid),
inlijn=VALUES(inlijn),sjabloon=VALUES(sjabloon),conclusie=VALUES(conclusie),
save=VALUES(save);

INSERT INTO sterren (beoordelingid,userid,werkid,titelwerk,actie,sterren)

VALUES ('$beoordelingid','$user','$id','$titelwerk',
'$actie','$sterren'); COMMIT");

我改编了以下内容。 insert1仍然无法正常工作。 Insert2工作

$dbo->beginTransaction();

//NOT WORKING
$insert1 = $dbo->prepare("INSERT INTO beoordelingen(beoordelingid, userid, werkid, inlijn, sjabloon, conclusie, save)
VALUES (:beoordelingid, :user, :werkid, :inlijn, :sjabloon, :conclusie, '0')
ON DUPLICATE KEY UPDATE
beoordelingid=VALUES(beoordelingid),
userid=VALUES(userid),
werkid=VALUES(werkid),
inlijn=VALUES(inlijn),
sjabloon=VALUES(sjabloon),
conclusie=VALUES(conclusie),
save=VALUES(save);"
);
//THIS WORKS
$insert2 = $dbo->prepare("INSERT INTO sterren (beoordelingid, userid, werkid, titelwerk, actie, sterren)
VALUES (:beoordelingid, :user, :id, :titelwerk, :actie, :sterren);"
);
//NOT WORKING
$insert1->execute(array(
'beoordelingid' => $beoordelingid,
'user' => $user,
'werkid' => $werkid,
'inlijn' => $inlijn,
'sjabloon' => $sjabloon,
'conclusie' => $conclusie,
'save' => $save
));
//THIS WORKS
$insert2->execute(array(
'beoordelingid' => $beoordelingid,
'user' => $user,
'id' => $werkid,
'titelwerk' => $titelwerk,
'actie' => $actie,
'sterren' => $sterren
));

$dbo->commit();

我的最后一个问题:

$sterren=$_POST['sterren'];
$user=$_REQUEST['user'];
$userid=$_POST['userid'];
$actie=$_POST['actie'];

$dbo->beginTransaction();
//THIS WORKS
$insert1 = $dbo->prepare("INSERT INTO  sterren(sterren,userid,actie)
VALUES (:sterren, :userid, :actie);"
);

//THIS DOESN"T WORK
$insert2 = $dbo->prepare("INSERT INTO sterren(sterren,userid,actie)
VALUES (:-sterren, :user, :actie);"
);

//THIS WORKS
$insert1->execute(array(
'sterren' => $sterren,
'userid' => $userid,
'actie' => $actie
 ));

//THIS DOESN"T WORK
$insert2->execute(array(
'-sterren' => $sterren,
'user' => $user,
'actie' => $actie
));

$dbo->commit();

1 个答案:

答案 0 :(得分:0)

这不是如何使用预准备语句(->prepare())或如何使用PDO进行交易。

首先,prepare()用于"准备"带有占位符的一个 SQL查询,以便您可以在稍后的函数(execute())中传递参数,并避免从串联字符串中注入SQL。

其次,如果您想使用交易,那么您应该使用PDO的beginTransactioncommit功能。

尝试这样的事情:

$dbo->beginTransaction();

$insert1 = $dbo->prepare('INSERT INTO beoordelingen(beoordelingid, userid, werkid, inlijn, sjabloon, conclusie, save)
    VALUES (:beoordelingid, :user, :werkid, :inlijn, :sjabloon, :conclusie, :save)
    ON DUPLICATE KEY UPDATE
        beoordelingid=VALUES(beoordelingid),
        userid=VALUES(userid),
        werkid=VALUES(werkid),
        inlijn=VALUES(inlijn),
        sjabloon=VALUES(sjabloon),
        conclusie=VALUES(conclusie),
        save=VALUES(save);'
);

$insert2 = $dbo->prepare('INSERT INTO sterren (beoordelingid, userid, werkid, titelwerk, actie, sterren)
    VALUES (:beoordelingid, :user, :id, :titelwerk, :actie, :sterren);'
);

$insert1->execute(array(
    'beoordelingid' => $beoordelingid,
    'user' => $user,
    'werkid' => $werkid,
    'inlijn' => $inlijn,
    'sjabloon' => $sjabloon,
    'conclusie' => $conclusie
));

$insert2->execute(array(
    'beoordelingid' => $beoordelingid,
    'user' => $user,
    'id' => $id,
    'titelwerk' => $titelwerk,
    'actie' => $actie,
    'sterren' => $sterren
));

$dbh->commit();