以下是从中检索数据并尝试插入mysql表的数组,但是当插入多于1行时效果很好,而当只插入1行时失败。
// 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_out_status是在别处明确定义的,根本没有任何问题。我已经使用var_dump()
检查了数组存在的数据就好了。问题是如果要在表中插入一行,则会显示以下错误。
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
如果要在表中插入多于一行,那么它的工作正常。可能是我错误地定义了$emp_code
和$dateNTime
。
以下是单行时的样子。
echo " <pre>";
print_r($array_att_logs);
echo "/<pre>";
Array
(
[Row] => Array
(
[PIN] => 406
[DateTime] => 2018-05-06 14:40:09
[Verified] => 1
[Status] => 3
[WorkCode] => 0
)
)
/
using var_dump it looks like below
array(1) { ["Row"]=> array(5) { ["PIN"]=> string(3) "406" ["DateTime"]=> string(19) "2018-05-06 14:40:09" ["Verified"]=> string(1) "1" ["Status"]=> string(1) "3" ["WorkCode"]=> string(1) "0" } }
答案 0 :(得分:0)
您遇到问题的原因是$array_att_logs
的数组结构在有多行时只有1行有所不同。因此,您需要测试该情况并更改迭代数组的方式。检查是否只有1行的最简单方法是查看$ array_att_logs ['Row']的内容是否是数组数组。为此,我们使用array_values($array_att_logs['Row'])
来确保我们有一个索引为0的条目,然后测试该值以查看它是否是一个数组。然后我们使用该结果来改变foreach迭代的值:
$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'];
...