Php 由于数组数据类型错误,无法插入mysql表
以下是从中检索数据并尝试将其插入mysql表的数组,但在插入多行时效果良好,而在仅插入一行时失败Php 由于数组数据类型错误,无法插入mysql表,php,mysql,Php,Mysql,以下是从中检索数据并尝试将其插入mysql表的数组,但在插入多行时效果良好,而在仅插入一行时失败 // The structure of the array is as follows Array ( [Row] => Array ( [0] => Array ( [PIN] => 1274 [DateTime] =&g
// The structure of the array is as follows
Array
(
[Row] => Array
(
[0] => Array
(
[PIN] => 1274
[DateTime] => 2018-04-07 09:28:16
[Verified] => 15
[Status] => 3
[WorkCode] => 0
)
[1] => Array
(
[PIN] => 157
[DateTime] => 2018-04-07 10:22:56
[Verified] => 15
[Status] => 3
[WorkCode] => 0
)
// these are the raw punch data from biometric machine
下面是当前正在使用的一段代码
if(isset($array_att_logs) && isset($array_att_logs['Row'])) {
foreach ($array_att_logs['Row'] as $value) {
$emp_code = $value['PIN']; // line 92 $dateNTime = $value['DateTime']; //line 93
$punch_query = "INSERT IGNORE INTO punching_data_table (emp_code, date_time,in_out_status) VALUES ('$emp_code', '$dateNTime','$in_out_status')";
$punch_result = mysql_query($punch_query);
echo mysql_error();
}
} echo var_dump($array_att_logs);
请注意,$in\u out\u状态是在别处明确定义的,这似乎没有任何问题。我使用var\u dump()
检查了数组中是否存在数据。问题是,如果要在表中插入一行,则会显示以下错误
如果要插入到表中的行超过1行,那么它就可以正常工作。可能是我对$emp\u code
和$dateNTime
的定义不正确
下面是当只有一行时的情况
echo”“;
打印($array\u att\u log);
回声“/”;
排列
(
[行]=>数组
(
[引脚]=>406
[日期时间]=>2018-05-06 14:40:09
[已验证]=>1
[状态]=>3
[工作代码]=>0
)
)
/
使用var_dump,如下所示
数组(1){[“行”]=>数组(5){[“PIN”]=>字符串(3)“406”[“日期时间”]=>字符串(19)”2018-05-06 14:40:09“[“已验证”]=>字符串(1)“1”[“状态”]=>字符串(1)“3”[“工作代码”]=>字符串(1)“0”}
出现问题的原因是,$array\u att\u logs
的数组结构在只有一行时与有多行时不同。因此,您需要针对这种情况进行测试,并更改遍历数组的方式。检查是否只有一行的最简单方法是查看$array_att_logs['row']的内容是否是一个数组数组。为此,我们使用array\u值($array\u att\u logs['Row'])
来确保我们有一个索引为0的条目,然后测试该值是否为数组。然后,我们使用该结果更改foreach迭代的值:
错误消息表示
$value
是字符串,而不是数组。你检查过数组中只有一行时是什么样子的吗?@Nick question更新了数组中只有一行时的样子。因此数组结构确实不同,$array\u att\u logs['row']
不再是数组数组,它只是一个数组。因此,您的foreach循环将值406
,2018-05-06 14:40:09
等分配给$value
,这些值都是字符串,因此您会得到错误。因此,您需要弄清楚如何使结构一致,而不考虑行数。i、 e.对于一行,它应该看起来像Array([row]=>Array([0]=>Array([PIN]=>406等等)。
@Nick我可以改为进行检查,以确保只有当没有行超过1时才执行插入。例如,如果$Array\u att\u row['row']>0然后执行insert else false。您肯定要执行该insert?否则您将丢失数据?但是,如果您有行数,您可以使用它来控制foreach,当只有一行时,将其设为foreach($array\u att\u logs as$value
)。
Warning: Illegal string offset 'PIN' in /home1/.../punch-raw.php on line 92
Warning: Illegal string offset 'DateTime' in /home1/..../punch-raw.php on line 93
$row = array_values($array_att_logs['Row']);
$multirows = is_array($row[0]);
foreach (($multirows ? $array_att_logs['Row'] : $array_att_logs) as $value) {
$emp_code = $value['PIN'];
...