У меня проблемы с архивированием ряда данных. Пользователь вводит текст — имя_сервера — который хранится в базе данных под столбцом «имя_сервера». После нажатия кнопки SQL должен вставить эти данные в новую таблицу — archive_servers — и затем удалить их из исходной таблицы, однако он только удалит данные и не вставит их в новую таблицу.
Ниже мое соединение PHP с моей базой данных, проверки соединения, операторы SQL для вставки, выбора и удаления и HTML для формы для ввода.
<?php
$message = '';
$db = new mysqli('localhost', 'root', '', 'isad235');
if($db->connect_error)
{
$message = $db->connect_error;
}
else
{
$message = 'CONNECTION OK';
$sql = "INSERT `archive_servers` SELECT * FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql;
$sql = "DELETE FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
if ($db->error)
{
echo $message = $db->error;
}
}
?>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="post"/>
Server Name: <input type="text" name="name"/>
<input type="submit" name="submit" value="Archive"/>
</form>
</body>
</html>
Я проверил соединение, и все нормально, у меня есть echo’d $ _POST, и он возвращает слово ‘Array’.
Вероятно, я пропустил что-то очень глупое, например символ, которого там быть не должно, или какую-то небольшую синтаксическую ошибку. Я использую NetBeans, и он не выдает никаких ошибок при запуске проекта. Любая помощь будет очень высоко ценится.
$sql = "INSERT `archive_servers` SELECT * FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql;
$sql_delete = "DELETE FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql_delete;
$result = $db->query($sql_delete);
if ($db->error)
{
echo $message = $db->error;
}
С этой частью кода вы выполняете запрос только один раз.
Вы должны выполнить SQL два раза (для вставки и удаления).
Это сработает за вас:
$sql_insert = "INSERT `archive_servers` SELECT * FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql_insert;
$insert_result = $db->query($sql_insert);
if ($db->error)
{
echo $message = $db->error;
}
$sql_delete = "DELETE FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql_delete;
$delete_result = $db->query($sql);
if ($db->error)
{
echo $message = $db->error;
}
if ($insert_result && $delete_result) {
echo 'Everything ok';
}
else {
echo 'Error occured!';
}
Вы не выполняете часть INSERT. Я бы также порекомендовал проверить успешность вставки перед удалением строки с помощью запроса (медленнее, но безопаснее) или простой проверки успешности.
$sql = "INSERT `archive_servers` SELECT * FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
$sql = "DELETE FROM `servers` WHERE `ServerName` = '".$_POST['name']."';";
echo $sql;
$result = $db->query($sql);
Ваша первая ошибка — $ sql = «INSERT INTOarchive_servers
ВЫБРАТЬ ИЗ servers
ГДЕ ServerName
= ‘». $ _ POST [‘ name ‘].»‘; «;