Получение MySQL Ошибка при попытке вставить данные из текстовых полей в базу данных

Я получаю эту ошибку при попытке вставить данные в мою базу данных с моего сайта:

Error: INSERT INTO newtask (new_category, new_department, new_required, 
new_name, new_address, new_contact, new_email,  new_logged, new_description) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
You have an error in your SQL syntax; check the manual that corresponds to 
your 
MySQL server version for the right syntax to use near '?, ?, ?, ?, ?, ?, ?, 
?, 
?)' at line 1

Вот мой код:

<?php
$servername = 'localhost';
$username = 'root';
$password = '';
$dbname = 'tasks_db';


$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO newtask (new_category, new_department, new_required, 
new_name, new_address, new_contact, new_email,  new_logged, new_description) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";

if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

Не уверен, что я здесь делаю не так?

1 ответ

Решение

Это подготовленное утверждение, поэтому вам нужно подготовить его, связать свои значения и затем выполнить:

$stmt = $conn->prepare("INSERT INTO newtask (new_category, new_department, new_required, 
new_name, new_address, new_contact, new_email,  new_logged, new_description) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");

// One "s" per placeholder value, plus one value per "s" after
$stmt->bind_param("sssssssss", $new_category, $new_department, ...);

if ($stmt->execute()) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

куда $new_category какое бы значение не входило в этот столбец и так далее. Это все описано в документации.

Ошибка в том, что вы пытались выполнить SQL-запрос со значениями-заполнителями и без данных. ? не является допустимым значением в MySQL. Он заменяется на уровне водителя bind_param Операция над заявлениями производится с prepare, query Функция выполняет код как есть без изменений.

Другие вопросы по тегам