Вы передаете значение $_POST[SV]
дважды, когда, предположительно, оно должно быть любым значением, которое вы хотели для NH
.Тем не менее, вы не только поймете это, используя подготовленные операторы, но и просто настроите себя для внедрения SQL с помощью текущего кода.
Посмотрите на этот пример:
<?php
try {
/* setup your database configuration */
$config = array(
"host" => "127.0.0.1",
"username" => "root",
"password" => "",
"name" => "db_name"
);
$dsn = "mysql:dbname=$config[name];host=$config[host];charset=utf8mb4";
$db = new PDO($dsn, $config["username"], $config["password"]);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
/* prepare the SQL statement */
$stmt = $db->prepare("
INSERT INTO `table_dtb` (
`SV`, `DT`, `DK`, `NH`, `ttDK`, `ngTT`
) VALUES (
:sv, :dt, NOW(), :nh, '1', NOW()
);
");
/* execute the statement passing the parameterized values */
$stmt->execute(array(
":sv" => $_POST["SV"],
":dt" => $_POST["DT"],
":nh" => $_POST["NH"]
));
} catch(PDOException $ex) {
/* pdo exception */
} catch (Exception $e) {
/* php exception */
}
?>
Чтобы объяснить, что делает код, вы можете разбить его на 4 отдельных раздела.Первый раздел - это обработчик исключений Try / Catch.В любое время, когда у вас есть кусок кода, который может потерпеть неудачу, вы должны обернуть его в обработчики Try / Catch, что он говорит: «Я попытаюсь выполнить этот код, но если он потерпит неудачу, я хочу позаботиться оошибка, которая следует. "Причиной существования двух отдельных блоков catch является то, что у вас есть один, чтобы заботиться об ошибках базы данных, а другой - о ваших обычных ошибках PHP.Если все, что вы хотели сделать с ошибками, это сообщить пользователю, что произошла ошибка, просто используйте оператор echo.Однако, если вы выполняете отладку и сообщение об ошибке имеет отношение, вы можете получить сообщение execption, вызвав функцию getMessage.
Второй раздел - это конфигурация базы данных.Начиная с PHP 5, P HP D ata O bjects используются для обработки ваших операций с базой данных.Причина, по которой я лично настраиваю массив конфигурации, заключается в том, что для меня проще отлаживать и читать, хотя это не совсем необходимо.Важной частью является то, что вы создаете новый объект PDO.
Третий раздел готовит инструкцию SQL с использованием параметризованных значений.Поскольку пробелы игнорируются в операторах SQL, а PHP допускает продолжение строк в литералах String, вы можете отформатировать оператор SQL для лучшей читаемости, используя отдельные строки для разных сегментов оператора SQL.Основная идея значений, перед которыми стоит префикс :
, заключается в том, что они представляют значение, не сохраненное непосредственно в строке SQL.
В четвертом разделе выполняется параметризованный запрос.Вызов функции execute сам по себе будет запускать оператор SQL, но поскольку вы передали параметры в запросе SQL, вам также необходимо передать значения, которые должны быть отправлены.В этом случае мы назвали параметры, поэтому в ассоциативном массиве мы указываем имя параметра в качестве ключа, а затем назначаем значение, которое будет передано в качестве значения.
Надеемся, что это прояснит код для вас иесли у вас есть какие-либо вопросы, не стесняйтесь спрашивать.