MySQL вставка данных - получение ошибки, когда все выглядит хорошо

Это мой код, у нас есть база данных с названием "our_new_database".

Соединение в порядке, а также форма HTML и учетные данные, и я все еще не могу вставить информацию в базу данных.

Таблица создана, я вижу столбцы и строки в XAMPP / phpMyAdmin.

Единственная ошибка, которую я получаю, - это последнее эхо оператора If/Else - "Не удалось зарегистрироваться".

Перепробовал все что могу и до сих пор не могу заставить эту прошивку нормально работать.

Может кто-нибудь посоветовать мне что-нибудь?

<?php

include "app".DIRECTORY_SEPARATOR."config.php";
include "app".DIRECTORY_SEPARATOR."db-connection.php";
include "app".DIRECTORY_SEPARATOR."form.php";

$foo_connection = db_connect($host, $user_name, $user_password, $dbname);

$sql = "CREATE TABLE user_info(
    user_name_one VARCHAR(30) NOT NULL,
    user_name_two VARCHAR(30) NOT NULL,
    user_email VARCHAR(70) NOT NULL UNIQUE
)";

if(mysqli_query($foo_connection, $sql)){
    echo "Table created successfully";
}
else {
    echo "Error creating table - table already exist.".mysqli_connect_error($foo_connection);
}

if($_SERVER['REQUEST_METHOD'] == 'POST'){

    $user_name_one = $_POST["userOne"];
    $user_name_two = $_POST["userTwo"];
    $user_email = $_POST["userEmail"];

    $sql = "INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('".$_POST['userOne']."',('".$_POST['userTwo']."',('".$_POST['userEmail']."')";
    if(mysqli_query($foo_connection,$sql))
    {
        echo "Successfully Registered";
    }
    else
    {
        echo "Could not register";
    }
}

$foo_connection->close();

4 ответа

Решение

Вам нужно изменить

 $sql = "INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('".$_POST['userOne']."',('".$_POST['userTwo']."',('".$_POST['userEmail']."')";

к

$sql = "INSERT INTO `user_info`(`user_name_one`,`user_name_two`,`user_emai`l) VALUES ('$user_name_one','$user_name_two','$user_email')";

помните, что вы должны использовать подготовленный запрос

$sql= $foo_connection->prepare("INSERT INTO user_info 
      (user_name_one,user_name_two,user_email)) 
    VALUES(?,?,?)");
$sql->bind_param('sss', $user_name_one, $user_name_two, $user_email );
$sql->execute(); 

Следует избегать прямого использования переменных в операторах SQL, вместо этого следует использовать параметризованные запросы.

Это также должно исключить необходимость связывания строк и проблем манипулирования.

$stmt = $foo_connection->prepare("INSERT INTO user_info 
      (user_name_one,user_name_two,user_email)) 
    VALUES(?,?,?)");
$stmt->bind_param('sss', $user_name_one, $user_name_two, $user_email );
$stmt->execute();

Я считаю ваши скобки в этой строке:

$sql = "INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('".$_POST['userOne']."',('".$_POST['userTwo']."',('".$_POST['userEmail']."')";

Не совпадайте, это должно выглядеть примерно так:

$sql = "INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('".$_POST['userOne']."','".$_POST['userTwo']."','".$_POST['userEmail']."')";

Причина для знать ваш запрос:

"INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('value',('value1',('value2')"

Как сказано выше, вы можете использовать: echo $foo_connection->error

Чтобы увидеть некоторые ошибки отображаются

$sql = "INSERT INTO user_info (userOne,userTwo,userEmail) VALUES('".$_POST['userOne']."','".$_POST['userTwo']."','".$_POST['userEmail']."')";
Другие вопросы по тегам