Я пытаюсь вставить некоторые данные в базу данных mysql, созданную на моем локальном хосте (используя сервер wamp). Но это не вставка каких-либо данных в таблицу. Также не отображаются сообщения об ошибках. С другой стороны, это показывает эхо, которое я сделал.
Пожалуйста, помогите мне. Я не могу набрать весь код на одной странице, как этот вопрос как я перенаправляю на эту страницу из промежуточного файла php.
Вот код, который я написал.
<?php
$con = mysqli_connect("localhost", "root", "11111", "CAR_PARKING_SYSTEM");
$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];
if(!strcmp($V_Type, "four_wheel"))
{
$charge = 400;
}
else
{
$charge = 50;
}
$query = "INSERT INTO CUSTOMER_VEHICLE (V_License_No, D_License_No, Arrived_Time, Charge)
VALUES ('$V_License_No', '$D_License_No', 'date('H:i')', '$charge')";
echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
?>
Вот способ обработки этого запроса:
Сначала мы создаем дескриптор базы данных. Большинство людей в наши дни используют объектно-ориентированный способ сделать это, поэтому мы будем использовать его здесь.
$mysqli = new MySQLi('localhost', 'root', '11111', 'CAR_PARKING_SYSTEM');
Затем мы определяем запрос SQL. Вопросительные знаки (?
) являются заполнителями для того, где будут размещены значения.
$sql = <<< SQL
INSERT INTO `CUSTOMER_VEHICLE` (
`V_License_No`,
`D_License_No`,
`Arrived_Time`,
`Charge`
) VALUES (
?, ?, ?, ?
);
SQL;
Для заполнения заполнителей нам нужно подготовить запрос. Это называется «подготовленное заявление» (или «stmt» для краткости).
Подготовленные операторы отправляются в базу данных, которая проверяет их на наличие ошибок, а также оптимизирует их так, чтобы последовательные вызовы execute()
метод выполняется быстрее. В этом случае, однако, мы в основном просто используем подготовленный оператор, чтобы избежать влияния злонамеренного ввода на запрос.
$stmt = $mysqli->prepare($sql);
if ($stmt === false) {
die('Could not prepare SQL: '.$mysqli->error);
}
Прежде чем мы сможем использовать подготовленное утверждение, у нас должен быть какой-то способ поместить ценности в заполнители. Мы делаем это путем переплет некоторые переменные для заполнителей. В этом случае мы связываем переменные $vLicense
, $dLicense
, $arrived
а также $charge
для держателей мест. Имена переменных могут быть любыми.
$ok = $stmt->bind_param('sssi', $vLicense, $dLicense, $arrived, $charge);
if ($ok === false) {
die('Could not bind params: '.$stmt->error);
}
Теперь, когда мы связали некоторые переменные с заполнителями, мы можем начать устанавливать их значения. В этом случае мы используем filter_input()
функция для очистки ввода некоторых переменных. $charge
переменная имеет одно из двух значений в зависимости от того, с каким типом транспортного средства мы имеем дело.
$vLicense = filter_input(INPUT_POST, 'V_License_No', FILTER_SANITIZE_STRING);
$dLicense = filter_input(INPUT_POST, 'D_License_No', FILTER_SANITIZE_STRING);
$arrived = date('H:i');
if (isset($_POST['vehicle_type']) && $_POST['vehicle_type'] === 'four_wheel') {
$charge = 50;
} else {
$charge = 400;
}
Значения установлены, и теперь мы можем выполнить инструкцию. Это делается просто путем вызова заявления execute()
метод:
if ($stmt->execute() === false) {
die('Could not execute query: '.$stmt->error);
} else {
echo '<p>Query executed successfully!</p>';
}
$stmt->close();
Я призываю вас прочитать о MySQLi документация и расширение фильтра.
Вы ничего не вставляете, $query
это просто строка, вам нужно передать запрос в функцию mysqli, также лучше, если вы проверяете и избегаете SQL-инъекций. Ваш код должен быть примерно таким:
$mysqli = new mysqli("localhost", "root", "11111", "CAR_PARKING_SYSTEM");
$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];
$charge = !strcmp($V_Type, "four_wheel")?400:50;
$query = "insert into CUSTOMER_VEHICLE
(`V_License_No`, `D_License_No`, `Arrived_Time`, `Charge`)
values(? , ?, ?, ?)"$stmt = $mysqli->prepare($query);
$stmt->bind_param("ssss",$V_License_No, $D_License_No, date('H:i'), $charge);
if($stmt->execute()){
//success inserted
$stmt->close();
echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
}
else{
$error = $mysqli->error;
}
Вы забыли выполнить запрос:
$result = mysqli_query($query);
вам нужно использовать некоторую отладку, чтобы получить некоторые ошибки, о которых вы можете узнать дальше, как я это сделал из написанного скрипта
<?php
try
{
$con = mysqli_connect("localhost", "root", "11111", "CAR_PARKING_SYSTEM");
if (empty($con))
{
echo "Mysql failed".mysqli_error();
die; // should always kill script if you dont need it to continue
}
$D_License_No = $_POST['D_License_No'];
$V_License_No = $_POST['V_License_No'];
$V_Type = $_POST['vehicle_type'];
if(!strcmp($V_Type, "four_wheel"))
{
$charge = 400;
}
else
{
$charge = 50;
}
$query = "INSERT INTO CUSTOMER_VEHICLE (V_License_No, D_License_No, Arrived_Time, Charge)
VALUES ('$V_License_No', '$D_License_No', 'date('H:i')', '$charge')";
echo "<p>Driver License Number " .$D_License_No. "</p>";
echo "<p>Vehicle License Plate Number " .$V_License_No. "</p>";
}
catch (Exception $e)
{
echo $e;
}
?>
извините, если у меня отключен синтаксис, я в поезде и не лучшее место для кодирования: P