我已将bmatricno作为名为bmatricno_fk的外键的引用键。好了,我想插入一个包含bmatricno和bname的新数据,这是第一张pic。然后我想要更新bmatricno_fk的列,并使用引用键(bmatricno)使用相同的值。但是我失败了。
然后我尝试手动插入2个表插入。然后我有插入多个表的问题。我知道使用事务与提交,因为即时通讯使用PDO。问题是,因为我必须使用像:bmatricno' => $_POST['bmatricno'].
这样的代码。因此,我不知道如何使用包含这种事情的事务。
我的代码看起来像这样。 (不,不是吗?)
$ses = $_SESSION['sBorrow'];
$query = "
INSERT INTO borrow (
bmatricno,
bname,
bdatetime
) VALUES (
:bmatricno,
:bname,
NOW()
)
;
INSERT INTO thesis(
bmatricno_fk
) VALUES (
:bmatricno
)
SELECT serialno, title
FROM thesis
WHERE serialno = :ses
";
$query_params = array(
':bmatricno' => $_POST['bmatricno'],
':bname' => $_POST['bname'],
':ses' => $_SESSION['sBorrow']
);
try
{
// Execute the query to create the user
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
这是我目前的代码。所以我的问题是,一旦引用的密钥获得新值,外键是否可以更新?如果没有,如何使用我之前说过的代码进行交易?请帮助我。我需要完成这件事。
注意:您注意到在第二张图片和列上matricno_fk效果很好,因为我输入了一个值来插入值,这意味着手动。
答案 0 :(得分:0)
我确实为我的问题找到了解决方案。 frz3993工作,但我刚刚意识到我的一个变量是一个数组。因此我在查询中使用foreach。由于它是一个数组,我不知道如何在事务中使用foreach,因为即时通讯。所以我逐个执行查询。并把这个问题放在我的第二个陈述上。
$ses = $_SESSION['sBorrow'];
$query = "
INSERT INTO borrow (
bmatricno,
bname,
bdatetime
) VALUES (
:bmatricno,
:bname,
NOW()
)
";
$query_params = array(
':bmatricno' => $_POST['bmatricno'],
':bname' => $_POST['bname']
);
try
{
// Execute the query to create the user
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
//----------------------
$query = "
UPDATE thesis
SET
bmatricno_fk = :bmatricno,
bavailable = 'Unavailable'
WHERE
serialno = :ses
";
foreach($ses as $s){
$query_params = array(
':bmatricno' => $_POST['bmatricno'],
':ses' => $s
);
try
{
// Execute the query to create the user
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
}
catch(PDOException $ex)
{
// Note: On a production website, you should not output $ex->getMessage().
// It may provide an attacker with helpful information about your code.
die("Failed to run query: " . $ex->getMessage());
}
}
//----------------------
我知道这个解决方案可能不是最实用的,但我需要快速完成它,我只需要在localhost上呈现它。无论如何,谢谢你的帮助:)。