我正在使用codeigniter,我有一个包含大量列的大表,我希望将大量数据插入其中。是否有比在每列中编写名称更好的方法,然后是将在每列中插入的值。例如,一个php函数,它获取表列并将它们放在一个数组中,并有另一个数组,其值指向每一列......
codeigniter的例子:
$data = array('column_name1'=>'value1', 'column_name2' =>'value2'....);
$this->db->insert('table_name', $data);
常规php
mysql_query("INSERT INTO table_name (column_name1, column_name2) VALUES ("Value1"....)");
答案 0 :(得分:1)
使用您的数据示例:
$data = array('column_name1'=>'value1', 'column_name2' =>'value2'....);
$this->db->insert('table_name', $data);
您可以像这样构建查询:
private function buildInsertSql($data, $table) {
$columns = "";
$holders = "";
foreach ($data as $column => $value) {
$columns .= ($columns == "") ? "" : ", ";
$columns .= $column;
$holders .= ($holders == "") ? "" : ", ";
$holders .= ":$column";
}
$sql = "INSERT INTO $table ($columns) VALUES ($holders)";
return $sql;
}
然后您应该使用PDO运行它,因为不推荐使用mysql_query
。
您可以了解PDO如何将值绑定到“持有者”等。
此外,不要忘记其他形式的清理,例如列出您的列名称等。
答案 1 :(得分:0)
也许你正在寻找类似的东西
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name' ,
'date' => 'Another date'
)
);
$this->db->insert_batch('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')
来源:http://ellislab.com/codeigniter/user-guide/database/active_record.html
或者这可以作为扩展的基础
------------第一次评论后编辑-------------
因此,要获取yourtablename列,您可以在CI
中应用类似于Active Record Class方法的内容SELECT column_name
FROM information_schema.columns
WHERE table_name='Yourtablename'
这样您可以按照描述创建列数组并继续
答案 2 :(得分:0)
内部模型构造函数我将实例化一个属性,然后我将存储我的列名。我将多次重用该数组,这就是它在构造函数中的原因
$this->table_col = $this->db->list_fields('table_name');
在insert方法中,使用像这样的数组作为参数
$data = array(
array('column_name1'=>'value1', 'column_name2' =>'value2'....),
array('column_name1'=>'value1', 'column_name2' =>'value2'....),
array('column_name1'=>'value1', 'column_name2' =>'value2'....)
);
我会过滤删除每个无效字段的列。你可以将它包装在一个函数中,因为你将在其他地方使用它(update,insert_single,where子句)
foreach($data as &$single)
{
$invalid_keys = array_diff(array_keys($single), $this->table_col);
if(!empty($invalid_keys))
{
$single = array_diff_key($single,array_flip($invalid_keys));
}
}
如果我想确保每个查询都顺利进行,我将使用交易。否则只是insert_batch
$this->db->trans_begin();
$this->db->insert_batch('table_name', $data);
if ($this->db->trans_status() === FALSE)
{
$this->db->trans_rollback();
}
else
{
$this->db->trans_commit();
}
答案 3 :(得分:0)
$data = array('column_name1'=>'value1', 'column_name2' =>'value2'....);
foreach($data as $key as $value){
$sql = "INSERT INTO $table ($key) VALUES ($value)";
return $sql;
}
......我希望我能给你一个想法:)