Есть форма по отправке данных в таблицу бд.
Суть проблемы такая. При передаче данных или редактировании старых данных ничего не происходит. Таблица попросту не обновляется. НО при добавлении вручную записей, они отображаются с помощью fetchAll.
Это логика добавления записи.
public function postAdd($post) {
$params = [
':name' => $post['name'],
':description' => $post['description'],
':text' => $post['text'],
];
$this->db->query('INSERT INTO `posts` (`name`, `description`, `text`) VALUES (:name, :description, :text)', $params);
return $this->db->lastInsertId();
}
Это логика обновления старой записи.
public function postEdit($post, $id) {
$params = [
':id' => $id,
':name' => $post['name'],
':description' => $post['description'],
':text' => $post['text'],
];
$this->db->query('UPDATE `posts` SET name = :name, description = :description, text = :text WHERE id = :id', $params);
}
Все данные из запроса идут сюда.
public function query($sql, $params = []) {
$stmt = $this->db->prepare($sql);
if (!empty($params)) {
foreach ($params as $key => $val) {
$stmt->bindValue(':'.$key, $val, (is_int($val) ? PDO::PARAM_INT : PDO::PARAM_STR));
}
}
$stmt->execute();
return $stmt;
}
Этот код работает.
public function row($sql, $params = []) {
$result = $this->query($sql, $params);
return $result->fetchAll(PDO::FETCH_ASSOC);
}
Все константы проброшены через USE.
Кодировка таблицы utf8.
Для отправки формы использую AJAX.
$(document).ready(function() {
$('form').submit(function(event) {
var json;
event.preventDefault();
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: new FormData(this),
contentType: false,
cache: false,
processData: false,
success: function(result) {
json = jQuery.parseJSON(result);
if (json.url) {
window.location.href = '/' + json.url;
} else {
alert(json.status + ' - ' + json.message);
}
},
});
});
});
И есть один парадокс. Если в функцию query в execute напрямую передать параметры, то форма работает как надо, записи и добавляются и обновляются, но перестает работать отображение данных на самом сайте.
Подскажите пожалуйста, что я делаю не так и где может быть моя ошибка.