问题描述
我尝试从表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);