用mysql和php删除和更新

时间:2018-09-16 10:58:16

标签: php mysql

我正在建立具有类别的画廊,并且对该主题有疑问。

仅2张桌子。 第一个表具有类别

第二张表有照片数据。 第二个表具有第一个表中的category_id。 很简单...

现在,当我删除类别时,我想使用category_id = NULL ot =''更新第二张表。 有可能吗?

我尝试使用触发器,但没有成功。出现语法错误...

$sql = "
CREATE TRIGGER update_gal_items AFTER DELETE ON gallery_category
FOR EACH ROW
BEGIN
  UPDATE gallery_photos SET photo_category='' WHERE photo_category=$id;
END
";

请帮忙吗?

2 个答案:

答案 0 :(得分:2)

您应该申请Foreign key constraint:

ALTER TABLE gallery_photos
ADD FOREIGN KEY (photo_category) REFERENCES gallery_category(category_id)
ON DELETE SET NULL 

请注意,我假设category_id作为父表中的字段名称(gallery_category)。

现在,如果您仍然想使用Triggers,请在gallery_category表上定义以下触发器:

DELIMITER //
DROP TRIGGER IF EXISTS gallery_category_delete_trigger //

CREATE DEFINER=`root`@`localhost` TRIGGER gallery_category_delete_trigger 
    AFTER DELETE ON gallery_category  
    FOR EACH ROW 
BEGIN

      UPDATE gallery_photos 
         SET photo_category = NULL
      WHERE photo_category = OLD.category_id;

END //
DELIMITER ;

答案 1 :(得分:0)

很好地运行不同查询可以解决问题...

global $conn;
if( isset( $_POST['cat_id'] ) ) {
  $id = (int)$_POST['cat_id'];
}
$sql = "UPDATE `gallery_photos` SET `photo_category` = '' WHERE `photo_category` = ?";
$stmt1 = $conn->prepare( $sql );
$stmt1->bind_param('i', $id);
$stmt1->execute();
if (! $stmt1) {
       $this->log->error ( "Mysqli prepare error: " . mysqli_error ( $conn ) );
       throw new MysqliExecuteException ( "Mysqli error: " . mysqli_error ( $conn ) );
 }

$sql_n = "DELETE FROM `gallery_category` WHERE `category_id` = '$id'";
$stmt = $conn->prepare($sql_n);
$stmt->execute();
if (! $stmt) {
       $this->log->error ( "Mysqli prepare error: " . mysqli_error ( $conn ) );
       throw new MysqliExecuteException ( "Mysqli error: " . mysqli_error ( $conn ) );
 }

感谢大家的宝贵时间。 :)