Я решил пойти в PDO. Функция, приведенная ниже, должна перемещать строку в таблицу в другую базу данных (от этапа до производства), а затем удалять строку в стадии. Это 2 полностью разделенные базы данных.PDO не удалось переместить строку в другую базу данных
Я могу получить строку и вставить ее в производственную базу данных, но она не удаляет строку в промежуточной базе данных и дает мне ошибку, указав неправильное имя поля 343, которое является идентификатором строки, я не уверен, почему он думает, что это имя поля, где оно вводит значение.
Пожалуйста, также не стесняйтесь давать мне лучшие лучшие практики. Я не вижу свой код, как элегантный и предположим, что есть лучшие способы сделать это, esspecially с исключениями
private function moveCallToProduction() {
try {
$array = array(":id" => $this->call['info']['call_id']);
$sql = "SELECT * FROM `calls` WHERE `id`=:id";
$query = $this->staging->prepare($sql);
$query->execute($array);
$row = $query->fetch(PDO::FETCH_NUM);
try {
$sql = "INSERT INTO `calls` (`id`,`sip_id`,`extension`,`caller_id`,`stage`,`status`,`survey_id`,`start`,`answer`,`hangup`) VALUES (`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`,`?`)";
$stmt = $this->production->prepare($sql);
$stmt->execute($row);
if(!$stmt) {
throw new Exception('Unable to move the call '.$this->call['info']['call_id'].' to the production server.');
} else {
try {
$sql = "DELETE FROM `calls` WHERE `id`='".$this->call['info']['call_id']."'";
$query = $this->staging->query($sql);
if(!$query) {
throw new Exception('Unable to delete call '.$this->call['info']['call_id'].' from the staging server.');
}
}
catch(PDOException $e) {
$this->informer("FATAL",$e->getMessage());
}
}
}
catch(Exception $e) {
$this->informer("FATAL",$e->getMessage());
}
}
catch(PDOException $e) {
$this->informer("FATAL","We're unable to transport the call from the staging to production server. Error: ".$e->getMessage());
}
}
Попробуйте 'echo' переменную' $ sql' и посмотреть, что она содержит. –
Еще одна вещь: вам нужно обернуть значение id в одинарные кавычки? –
Интересно, что программист смешивал подготовленные операторы и простые запросы. Я предполагаю, что это проблема экранирования, потому что все остальные (подготовленные) операторы работают. –