我有2张桌子
我已将bmatricno用作称为bmatricno_fk的外键的引用键。好的,现在我想为一个表插入包含bmatricno和bname的新数据,这是第一个图片。然后我希望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运作良好,因为我将输入内容插入值中,这意味着手动输入。
最佳答案
好吧,我确实找到了解决我问题的方法。 frz3993工作,但我才意识到我的变量之一是数组。因此,我在查询上使用foreach。由于它是一个数组,由于即时通讯很忙,所以我不确定如何在内部事务中使用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上显示它即可。无论如何,感谢您的帮助:)
关于php - 引用的键插入新值后,如何使外键自动更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38683476/