Предположим, у меня есть очень большой массив информации для пользователя:
$user=array( "name"=>"john", "ip"=>"xx.xx.xx.xx", "email"=>"john@something.com", //lots more values )
Предположим также, что эта информация должна входить в более чем одну таблицу . Например, username
должно принимать users
таблицы, address
должен войти в таблицу details
и т. Д.
Теперь я использую определенную самодельную функцию для вставки в мои таблицы, которая сопоставляет ключи массива с именами столбцов и значениями массива с введенными значениями . Что-то похожее на это:
function insert_sql($table, arr $values){ GLOBAL $dbc; $sql="INSERT INTO `$table` (".implode(array_keys($values), ", ").") VALUES (".implode(array_values($values), ", ").")"; $dbc->prepare($sql)->execute(); return $dbc->lastInsertId(); } //I don't actually use this function, just trying to show you what is being accomplished.
Проблема в том, что моя функция использует все ключи и все значения , поэтому, когда мне просто нужны определенные части массива, помещенные в несколько таблиц, это не сработает.
Вопрос в том:
Как заставить оператор INSERT игнорировать столбец, если он не существует? Поэтому, если я вставляю name
, email
address
таблицы, но в этой таблице нет столбца адреса, мне нужно, чтобы он вставлял строку с именем и адресом электронной почты, но просто игнорировал тот факт, что столбца адреса там нет.
EDIT: Другой вариант – создать массив со столбцами таблицы и использовать его для фильтрации массива значений. Хотя я не совсем уверен, как это сделать.