我尝试使用codeigniter在我的MySQL表中插入数据。
首先,我从配置XML中检索列,我应该在其中插入数据和目标节点,这些节点应该从另一个XML返回插入值。
foreach ($sql_xml as $children) {
foreach ($children as $index => $child) {
if ($child != 'feed_id') {
$keys[] = $index;
$into[] = $child; //this holds the table columns
}
}
}
然后我检索每行要插入的多个值。
$products = array();
$data = array();
foreach ($target_xml as $feeds) {
$feeds = $this->xml2array($feeds); //SimpleXMLObject to array
$columns = new RecursiveIteratorIterator(new RecursiveArrayIterator($feeds)); //get all recursive iteration
foreach ($columns as $index=>$column) {
if (in_array($index, $keys)) { //here I get the values on matching nodes
$data[] = $column;
}
}
$products[] = $data;// this are the datas which should be inserted
}
这里应该是插入:我一直在查找文档,如果插入是一个关联数组,在我的情况下是在匹配键上的流上创建的,它有一个非常好的解决方法。
$this->db->insert_batch('mytable', $products);
问题是包含目标列的into
数组,我不知道如何在我的产品数组中推送主题。
答案 0 :(得分:2)
我没有正确理解您的示例代码,但这是我的尝试。
您想要此代码
if ($child != 'feed_id') {
$keys[] = $index;
$into[] = $child; //this holds the table columns
}
要改成像这样的东西
if ($child != 'feed_id') {
$keys[$index] = $child;
}
你想要这个
if (in_array($index, $keys)) {
$data[] = $column;
}
要像这样改变
if ( array_key_exists($index, $keys) ) {
$data[$keys[$index]] = $column;
}