ユーザーに関する非常に大きな情報の配列があるとします。
$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
しても、このテーブルに住所列がない場合は、名前と電子メールを含む行を挿入する必要がありますが、住所列がないという事実を単純に無視します。
EDIT:他のオプションは、テーブルの列で配列を作成し、それを使用して値の配列をフィルタリングすることです。これを設定する方法はよくわかりませんが。