Как использовать bind_param для удаления из базы данных? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть следующий метод, который вставляет данные в таблицу в моей базе данных

function database_preparedModify($sql, $types, &$insertId, ...$value)
  {
      $statement =  mysqli_prepare(database_link(), $sql);

      $statement->bind_param($types, ...$value);

      $statement->execute();

      $insertId = $statement->insert_id;

      return $statement->affected_rows;
  }

Допустимое использование этой функции (которая прекрасно работает):

private function saveError(someError $error)
    {
        $sql = 'INSERT INTO stackoverflowErrors (dateTimeTest, errorURL, clientInfo, accountID, actions, message) 
                VALUES (?, ?, ?, ?, ?, ?)';
        $insertId = 0;
        database_preparedModify($sql, 'ssssss', $insertId, $error->getTime(), $error->errorURL(), $error->getClientInfo(), $error->getAccountID(), $error->getAction(), $error->getMessage());
    }

Где методы getTime(), errorURL() ... и т. Д. Находятся в другом классе и на самом деле не имеют отношения к этому вопросу.

Мой вопрос: как я могу использовать метод database_preparedModify() для удаления из базы данных вместо вставки? Я пробовал следующее:

$filename = 'some valid filename';
$feed["id"] = $validID;
$insertId = 0;
$sql = "DELETE FROM `".$config_databaseTablePrefix."table1` WHERE filename = '".database_safe($filename)."'";

        database_preparedModify($sql,'s',$insertId, ' ');

$sql = "DELETE FROM `".$config_databaseTablePrefix."table2` WHERE id = '".database_safe($feed["id"])."'";

        database_preparedModify($sql,'s',$insertId, ' ');

Но я получаю эту ошибку:

Предупреждение: mysqli_stmt :: bind_param (): Количество переменных не соответствует количеству параметров в подготовленном операторе

1 Ответ

1 голос
/ 31 мая 2019

Вам необходимо использовать заполнители в вашем запросе.

$sql = "DELETE FROM `".$config_databaseTablePrefix."table1` WHERE filename = ?";
database_preparedModify($sql,'s',$insertId, $filename);

и

$sql = "DELETE FROM `".$config_databaseTablePrefix."table2` WHERE id = ?";
database_preparedModify($sql,'s',$insertId, $feed["id"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...