Я получаю эту ошибку в почтовом клиенте при работе с PHP REST API:
Неустранимая ошибка : Uncaught PDOException: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования с'isting_name = 'name', address = 'test', po ... 'в строке 2 в C: \ xampp \ htdocs \ project \ dTb \ models \ Listing.php: 137 Трассировка стека:
Вот моя модель
// Создание Post
public function create(){
// запрос
$query = 'INSERT INTO ' . $this->table .
'SET
listing_name = :listing_name,
address = :address,
postal_code = :postal_code,
google_id = :google_id,
website = :website,
tag_array = :tag_array,
area_array = :area_array';
// подготовка выражения
$stmt = $this->conn->prepare($query);
// очитска данных
$this->listing_name = htmlspecialchars(strip_tags($this->listing_name));
$this->address = htmlspecialchars(strip_tags($this->address));
$this->postal_code = htmlspecialchars(strip_tags($this->postal_code));
$this->google_id = htmlspecialchars(strip_tags($this->google_id));
$this->website = htmlspecialchars(strip_tags($this->website));
$this->tag_array = htmlspecialchars(strip_tags($this->tag_array));
$this->area_array = htmlspecialchars(strip_tags($this->area_array));
// привязка данных
$stmt->bindParam(':listing_name', $this->listing_name);
$stmt->bindParam(':address', $this->address);
$stmt->bindParam(':postal_code', $this->postal_code);
$stmt->bindParam(':google_id', $this->google_id);
$stmt->bindParam(':website', $this->website);
$stmt->bindParam(':tag_array', $this->tag_array);
$stmt->bindParam(':area_array', $this->area_array);
// выполнение запроса
if($stmt->execute()) {
return true;
}
printf("Error: %s ", $stmt->error);
}
create.php
<?php
// заголовки
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Access-Control-Allow-Headers, Access-Control-Allow-Methods, Authorization, X-Requested-With');
include_once '../../config/Database.php';
include_once '../../models/Listing.php';
// инициализация БД и соединения
$database = new Database();
$db = $database->connect();
// инициализация списка объектов
$listing = new Listing($db);
// получение сырых POST данных
$data = json_decode(file_get_contents("php://input"));
$listing->listing_name = $data->listing_name;
$listing->address = $data->address;
$listing->postal_code = $data->postal_code;
$listing->google_id = $data->google_id;
$listing->website = $data->website;
$listing->tag_array = $data->tag_array;
$listing->area_array = $data->area_array;
// создание листинга
if($listing->create()){
echo json_encode(
array('message' => 'Post создан)
);
} else {
echo json_encode(
array('message' => 'Список не создан')
);
}
Вывод:
{
"listing_name": "test name",
"address": "test address",
"postal_code": "n12 345",
"google_id": "googleid",
"website": "website",
"tag_array": "tagarray, array",
"area_array": "areaarray, array"
}
Ответ 1
Попробуйте добавить пробел перед "SET" в своем запросе
$query = 'INSERT INTO '.
$this->table.
' SET
listing_name = :listing_name,
Web