使用PHP将表1中的多个值插入表2中

问题描述

我尝试从表1中获取所有值,然后将它们推入数组中。然后,将数组插入表2中,但出现错误消息:“非法字符串偏移量'name'”,“非法字符串偏移量” lat“”,“非法字符串偏移量” lng“” 我已经搜索了此错误,然后尝试修复它,但是我不能。有人可以帮我吗? 这是我的代码

$query = "DELETE FROM gpsdata";
    $query_input = "SELECT name,lat,lng FROM gpsdata";
    $result = MysqLi_query($connect,$query_input);
    while ($data = MysqLi_fetch_array($result)) {
        if (is_array($data)) {
            $sql = array();
            foreach ($data as $row) {
                $sql[] = '(' . $row['name'] . ',' . $row['lat'] . ',' . $row['lng'] . ')';
            };
            $query2 = "INSERT INTO gpsdata_backup (name,lng) VALUES ' . implode(',',$sql)'";
            $result_insert = MysqLi_query($connect,$query2);
       }
}

解决方法

由于您没有对数据执行任何任务,为什么不通过直接插入select来在mysql中进行整个操作呢?

insert into `gpsdata_backup` ( `name`,`lat`,`lng` )
    select `name`,`lng` from `gpsdata`;

即:

$sql='insert into `gpsdata_backup` ( `name`,`lng` from `gpsdata`';
    
$result=$connect->query( $sql );
,

你去了。非法offset error即将到来是因为您有不必要的inner foreach loop,因此在$row数组中找不到值。那不是必需的

// Array declaration to be on top
$sql = array();
$query_input = "SELECT name,lat,lng FROM gpsdata";
$result = mysqli_query($connect,$query_input);

while ($data = mysqli_fetch_array($result)) {

    if (is_array($data)) {

        // Enclose string values in quotes
        $sql[] = '("' . $data['name'] . '","' . $data['lat'] . '","' . $data['lng'] . '")';
        
   }
} 

// Final insert should not be inside the loop 
$query2 = "INSERT INTO gpsdata_backup (name,lng) VALUES ".implode(",",$sql);
$result_insert = mysqli_query($connect,$query2);