Вставлять запросы часто требуется много заполнителей. Стиль вопросительного знака тогда трудно читать, и именованные параметры повторяются и подвержены ошибкам ввода. Итак, я создал функцию для всего запроса на вставку:
function insert($table, $col_val){
global $db;
$table = preg_replace('/[^\da-z_]/i', '', $table);
$smt = $db->prepare("DESCRIBE `$table`");
$smt->execute();
$columns = $smt->fetchAll(PDO::FETCH_COLUMN);
$sets = array();
$exec = array();
foreach($col_val as $col => $val){
if(!in_array($col, $columns))
return false;
$sets[] .= "`$col`=?";
$exec[] = $val;
}
$set = implode(',', $sets);
$smt = $db->prepare("INSERT INTO `$table` SET $set");
$smt->execute($exec);
return $db->lastInsertId();
}
Использование прост:
insert('table_name', array(
'msg' => 'New message',
'added' => date('Y-m-d H:i:s'),
));
И если вам нужно lastInsertId()
:
$new_id = insert(...
Используя IntelliJ я просто должен был установить другую (более высокую) Версию JDK. После перезапуска IDE все работало, и даже все зависимости были решены.