PDO с подготовленным оператором множественного обновления не может быть выполнен - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь создать несколько подготовленных операторов PDO, которые обновляют 2 таблицы.

У меня возникают проблемы и возникают различные ошибки при попытке заставить мой код работать, последняя версия: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

Глядя на SO, я нашел разные способы сделать это, однако я не могу понять, как их реализовать.

Другая проблема - невозможность использования $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);.Я читал в Интернете, что это импорт, чтобы включить для безопасности.Однако я также понимаю, что он не работает с Multi Queries PDO (?).

Возможно ли выполнить Multi Update или у меня должны быть другие сценарии?(Также мой код защищен от SQL-инъекций?)

Это код, с которым я работаю:

<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=*', '*', '*');
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);


$est_id = $_POST['est_id'];
$known_for = $_POST['known_for'];
$street_address = 'addressToAdd';

$sql = " UPDATE `theList`
 SET `known_for` = :known_for
 WHERE `id` = :est_id
    ";

$sql = " UPDATE `est_address`
  SET `street_address` = :street_address
  WHERE `id` = :est_id
     ";

 $params = array(
    ':est_id' => $est_id,
    ':known_for' => $known_for,
    ':street_address' => $street_address
);


  $statement = $conn->prepare($sql);

  $statement->execute($params);


  $conn = null;        // Disconnect
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>

1 Ответ

0 голосов
/ 27 октября 2018
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=*', '*', '*');
$conn->exec("SET CHARACTER SET utf8");      // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$est_id = $_POST['est_id'];
$known_for = $_POST['known_for'];
$street_address = 'addressToAdd';

$sqlKnown = "UPDATE `theList` SET `known_for` = :known_for WHERE `id` = :est_id";
$stKnown = $conn->prepare( $sqlKnown );
$stKnown->execute([
  ':est_id' => $est_id,
  ':known_for' => $known_for,
]);

$sqlStreet = "UPDATE `est_address` SET `street_address` = :street_address WHERE `id` = :est_id";
$stStreet = $conn->prepare( $sqlStreet );
$stStreet->execute([
  ':est_id' => $est_id,
  ':street_address' => $street_address
]);

  $conn = null;        // Disconnect
}
catch(PDOException $e) {
  echo $e->getMessage();
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...