Как сделать общую функцию на удаление из разных таблиц на php?

Рейтинг: 0Ответов: 2Опубликовано: 25.03.2023

У меня есть множество таблиц. И когда мне нужно удалить какую-нибудь запись, я использую для каждой таблицы свой, но почти одинаковый код. Я пыталась написать общую функцию, с передачей параметров через переменные, но оно никак не работает. А найти что-то подобное я не могу в интернете. Может гуглю не так... Вот такая функция:

<?php
function delete($id, $table, $place) 
{
    require_once('../connect.php');

    // $id = $_GET['id'];

    // $mysqli->query("DELETE FROM $table WHERE id = $id");
    $stmt = $mysqli->prepare("DELETE FROM ".$table." WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute(); 

    header ("Location: ../$place.php");
}
?>

Вот вызов этой функции и подключение файла:

require_once('moderator/delete_function.php');
delete($id, "fandoms", "fandoms");

Хотя вот этот вариант работает хорошо с конкретными значениями без переменных.

require_once '../connect.php';

    $id = $_GET['id'];

     $stmt = $mysqli->prepare("DELETE FROM fandoms WHERE id = ?");
     $stmt->bind_param("i", $id);
     $stmt->execute(); 

    // require_once('delete_function.php');
    // delete($id, 'fandoms', 'fandoms');

    header ('Location: ../fandoms.php');

Ответы

▲ 1

Похоже, что у вас опечатка в запросе, где подставляется $id вместо ? для параметра:

$stmt = $mysqli->prepare("DELETE FROM ".$table." WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute(); 
▲ 0

Оо, у меня заработало! я заменила require_once на require и все встало на свои места.
код пока такой:

<?php 
//delete_funtion.php
function delete_zz(int $id, string $table, string $place) 
{
    require'../connect.php';

    // $id = $_GET['id'];

    // $mysqli->query("DELETE FROM $table WHERE id = $id");
    $stmt = $mysqli->prepare("DELETE FROM ".$table." WHERE id = ?");
    $stmt->bind_param("i", $id);
    $stmt->execute();  

    // $stmt = $mysqli->prepare("DELETE FROM ? WHERE id = ?");
    // $stmt->bind_param("si", $table, $id);
    // $stmt->execute(); 

    header ("Location: ../$place.php");
}
?>
Это кнопка удаления в другом файле
<a class="moder_button" href="moderator/delete_fandom.php?id=<?=$info_fandoms['id'] ?>">Удалить</a>

<?php   
// delete_fandom.php
    require_once '../connect.php';

    $id = $_GET['id'];

    require_once('delete_function.php');
    delete_zz($id, 'fandoms', 'fandoms');

    header ('Location: ../fandoms.php');
?>