有我的資料庫的架構:

當我嘗試洗掉圖片時收到此錯誤訊息:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`scores`, CONSTRAINT `scores_ibfk_2` FOREIGN KEY (`picture_id`) REFERENCES `pictures` (`id`)) in /Applications/MAMP/htdocs/legogram/app/model/model.php:173
不喜歡的時候可以洗掉,喜歡的時候不能洗掉
這是列出我的影像的功能:
public function listPictures_session()
{
$this->open();
$stmt = $this->pdo->prepare("SELECT pictures.id, pictures.owner_id, pictures.title, pictures.description, pictures.path,
SUM(scores.score)/COUNT(scores.id) AS 'score'
FROM pictures LEFT OUTER JOIN scores ON pictures.id=scores.picture_id
GROUP BY pictures.id
ORDER BY pictures.id DESC LIMIT 100");
$stmt->execute();
return $stmt->fetchAll();
}
在我看來,我如何稱呼它:
$pictures = $this->model->listPictures_session();
foreach ($pictures as $picture) {
if ($picture["owner_id"] == $_SESSION["id"]) {
echo picture["id"] }"
但我沒有在我的 listPictures_session 函式的選擇中選擇 score.id 。所以我嘗試添加一個SELECT scores.id,所以我可以首先洗掉它。但是當我嘗試添加scores.id到SELECT我有一個GROUP BY錯誤。
我正在添加scores.id這種方式,但它不起作用:
SELECT pictures.id, pictures.owner_id, pictures.title, pictures.description, pictures.path,
SUM(scores.score)/COUNT(scores.id) AS 'score', scores.id
以及洗掉它的功能:
public function deletepicture($user)
{
$this->open();
$stmt = $this->pdo->prepare("DELETE FROM pictures WHERE id=:id");
return $stmt->execute(array(":id" => $user["id"]));
}
我該如何解決這個問題,以便我可以洗掉我的影像?非常感謝你,祝你有美好的一天
uj5u.com熱心網友回復:
(`test`.`scores`)表參考表的外鍵pictures
您必須在洗掉記錄之前洗掉(`test`.`scores`)參考記錄picturespictures
uj5u.com熱心網友回復:
我認為您的 GROUP BY 錯誤與您的實際問題無關。
基本上,如果您有scores參考特定圖片 ID 的行,那么您必須洗掉scores包含該圖片 ID 的所有行,然后才能洗掉pictures.
例如
DELETE FROM scores WHERE picture_id = :id
DELETE FROM pictures WHERE id = :id
uj5u.com熱心網友回復:
我看到它的方式,你真正想要做的是從pictures表中洗掉一行。scores您對該scores.picture_id參考有一個外鍵約束pictures.id。這些都是好事。
您的錯誤資訊如下:
SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`test`.`scores`, CONSTRAINT `scores_ibfk_2` FOREIGN KEY (`picture_id`) REFERENCES `pictures` (`id`)) in /Applications/MAMP/htdocs/legogram/app/model/model.php:173
這意味著在嘗試洗掉表中的行時違反了此外鍵約束pictures。這是由表中的一行或多行scores具有picture_idthat 參考引起的pictures.id。pictures如果不消除對它的所有參考,就無法洗掉行。null如果參考列允許,您可以將參考設定為null,也可以完全洗掉該行。據我所知,此表用于存盤用戶對其他用戶圖片的評分,如果沒有它參考的圖片 ID,此表中的行沒有意義,因此您最好的方法可能是洗掉有問題的行共。您可以在洗掉程序中執行此操作:
public function deletepicture($user) {
$this->open();
$stmt = $this->pdo->prepare(
<<<SQL
DELETE FROM
scores
WHERE
picture_id = :pictureId
SQL
);
$stmt->execute([
":pictureId" => $user["id"]
]);
$stmt = $this->pdo->prepare(
<<<SQL
DELETE FROM
pictures
WHERE
id = :id
SQL
);
return $stmt->execute([
":id" => $user["id"]
]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/473020.html
上一篇:如何將多維陣列合并為陣列
