Invalid parameter number: number of bound variables does not match number of tokens in /home/c/cn82200/udm/public_html/app/database/db.php:164
PDOStatement->execute(Array) #1 ... insert('posts', Array) #2
PHP код функции
function insert($table, $params)
{
global $pdo;
$i = 0;
$coll = '';
$mask = '';
foreach ($params as $key => $value) {
if ($i === 0) {
$coll = $coll . "$key";
$mask = $mask . "'" . "$value" . "'";
} else {
$coll = $coll . ", $key";
$mask = $mask . ", '" . "$value" . "'";
}
$i++;
}
$sql = "INSERT INTO $table ($coll) VALUES ($mask)";
$query = $pdo->prepare($sql);
$query->execute($params);
dbCheckError($query);
return $pdo->lastInsertId();
}
PHP код контроллера
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_post'])) {
//здесь был код для проверки картинки при загрузке
$title = trim($_POST['title']);
$img = trim($_POST['img']);
$city = trim($_POST['city']);
$topic = trim($_POST['topic']);
$description = trim($_POST['description']);
if ($title === '' || $description === '' || $topic === '' || $city === '') {
$errMsg = 'Error';
} else {
$post = [
'title' => $title,
'img' => $_POST['img'],
'id_topic' => $topic,
'id_city' => $city,
'description' => $description
];
$post = insert('posts', $post);
$post = selectOne('posts', ['id_post' => $id_post]);
$succMsg = 'Published';
}
БД
Все костыльное. Понятия не имею как исправить код, в PHP всего неделю-две суммарно. На мой взгляд количество переменных и токенов совпадает, но видимо это не так. Сама ошибка появилась только после загрузки на хостинг, до этого все всех устраивало. Подскажите, пожалуйста, какие строки надо переписать и на что их заменить. Спасибо