Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 由于数组数据类型错误,无法插入mysql表_Php_Mysql - Fatal编程技术网

Php 由于数组数据类型错误,无法插入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

以下是从中检索数据并尝试将其插入mysql表的数组,但在插入多行时效果良好,而在仅插入一行时失败

// 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'];
    ...