В общем пишу свой "велосипед". Решил написать CRUD для постов блога. Работает всё кроме update. Не могу обновить запись в БД. Не понимаю в чём проблема. Кричит что ошибка синтаксическая, но я всё верно сделал. О_о в общем посмотрите. Может быть подскажите где я сделал ошибку.
Код ошибки:Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 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 ' description, text WHERE id = ?' at line 1 in C:\OSPanel\domains\framework\components\engine\DB.php:31 Stack trace: #0 C:\OSPanel\domains\framework\components\engine\DB.php(31): PDO->prepare('UPDATE posts SE...') #1 C:\OSPanel\domains\framework\app\models\Post.php(34): components\engine\DB->query('UPDATE posts SE...', Array) #2 C:\OSPanel\domains\framework\app\controllers\admin\PostController.php(79): app\models\Post->updatePostById('3', 'aaaaaaaaaaaaaaa...', 'vvvvvvvvvvvvvvv...', 'eeeeeeeeeeeeeee...') #3 C:\OSPanel\domains\framework\components\engine\Router.php(81): app\controllers\admin\PostController->updateAction() #4 C:\OSPanel\domains\framework\index.php(8): components\engine\Router::run() #5 {main} thrown in C:\OSPanel\domains\framework\components\engine\DB.php on line 31
Это экшен в контроллере:public function updateAction()
{
$model = new Post;
$post = $model->getPostById($this->route['id']);
if (isset($_POST['submit'])){
$title = $_POST['title'];
$description = $_POST['description'];
$text = $_POST['text'];
$errors = false;
if(!$model->checkText($title,6)){
$errors[] = 'Поле title не должно быть пустым, минимальное кол-во символов 6';
}
if(!$model->checkText($description,10)){
$errors[] = 'Краткое описание дожно состоять минимум из 10 символов';
}
if(!$model->checkText($text,15)){
$errors[] = 'Минимальнок кол-во симколов в в полном описании - 15 символов';
}
if ($errors == false){
$model->updatePostById($this->route['id'],$title,$description,$text);
redirect('/admin/post/index');
}
}
$this->set(compact('post', 'errors', 'sss'));
}
Получение поста по его idpublic function getPostById($id){
$params = [
'id' => $id
];
return $this->db->one('SELECT * FROM posts WHERE id = :id',$params);
}
Метод который должен внести изменения в БД т.е. сделать updatepublic function updatePostById($id, $title, $description, $text){
$params = [
'id' => $id,
'title' => $title,
'description' => $description,
'text' => $text,
];
$this->db->query('UPDATE posts SET title, description, text WHERE id = :id', $params);
}
На всякий случай класс БД и методы для работы с ней. Чтобы было понятно как это всё связанно у меняclass DB
{
use Singleton;
protected $db;
/**
* DB constructor.
*/
protected function __construct(){
$db = require ROOT . '/components/config/config_db.php';
$opt = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
$this->db = new PDO($db['dsn'],$db['user'],$db['pass'],$opt);
}
public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
if (is_int($val)) {
$type = PDO::PARAM_INT;
} else {
$type = PDO::PARAM_STR;
}
$stmt->bindValue(':'.$key, $val, $type);
}
}
$stmt->execute();
return $stmt;
}
public function one($sql, $params = []) {
$result = $this->query($sql, $params);
return $result->fetch();
}
public function all($sql, $params = []) {
$result = $this->query($sql, $params);
return $result->fetchAll();
}
public function col($sql, $params = []) {
$result = $this->query($sql, $params);
return $result->fetchColumn();
}
public function lastInsertId() {
return $this->db->lastInsertId();
}
}