假设我有一个非常大的用户信息数组:
$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
, 插入 table users
,但该表没有地址列,我需要它来插入包含名称和电子邮件的行,但只需忽略地址列不存在的事实。
编辑:另一个选项是使用表的列创建一个数组,并使用它来过滤值数组。虽然我不确定如何设置它。