Проверьте правильность синтаксиса в руководстве, соответствующем версии вашего сервера MariaDB - оператор вставки не работает - PullRequest
0 голосов
/ 18 марта 2020
<?php
    include 'db_connection.php';

    $name = $_POST['name'];
    $password = $_POST['password'];
    $email = $_POST['email'];
    $phone = $_POST['phone'];

    $conn = OpenCon();
    echo "<br><br>Connected Successfully";

    $sql = "INSERT INTO 'customer'('customer name','password','email','phone number') VALUES([$name], [$password], [$email], [$phone]);";

    if (mysqli_query($conn, $sql)) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
?>

Этот код выдает ошибку при попытке использовать оператор INSERT. Я создал DBConenction, используя переменную $ conn.

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Решение для вашего кода

Я предполагаю, что ваши name, password, email и phone являются строками.

Таким образом, они должны появляться между кавычками в вашем финале запросы, поэтому

$sql = "INSERT INTO 'customer'('customer name','password','email','phone number') VALUES([$name], [$password], [$email], [$phone]);";

Измените на

$sql = "INSERT INTO 'customer'('customer name','password','email','phone number') VALUES('[$name]', '[$password]', '[$email]', '[$phone]')";

Кроме того, чтобы избежать внедрения SQL, вы должны экранировать строку, полученную из запроса POST, поэтому вы должны заменить

$name = $_POST['name'];
$password = $_POST['password'];
$email = $_POST['email'];
$phone = $_POST['phone'];

от

$name = mysqli_real_escape_string($conn, $_POST['name']);
$password = mysqli_real_escape_string($conn, $_POST['password']);
$email = mysqli_real_escape_string($conn, $_POST['email']);
$phone = mysqli_real_escape_string($conn, $_POST['phone']);

И перемещены после создания вашей связи.

Лучшее решение (если вы можете)

Лучшее решение для обработки баз данных в PHP используется подготовленный запрос или, что еще лучше: использование ORM, например Doctrine. Это будет намного безопаснее и надежнее.

0 голосов
/ 18 марта 2020

Избегайте нежелательной точки с запятой в конце и удалите одиночную кавычку из имени таблицы. Попробуйте со следующим. Также, так как 2 ваших поля содержат пробелы между ними, вы можете избежать использования одинарных кавычек и использовать `` backticks.

$sql = "INSERT INTO customer (`customer name`,password, email, `phone number`) VALUES ('$name','$password','$email', '$phone') ";
...