Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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_Arrays - Fatal编程技术网

Php 如何在mySQL中插入数组(不同)?

Php 如何在mySQL中插入数组(不同)?,php,mysql,arrays,Php,Mysql,Arrays,我有一个数组$workCard=$\u POST['rep\u list']我想将数组插入我的mySQL表task我面临的挑战是数组可能会有所不同,这意味着有时数组可能包含用户:id、客户id、轮胎、轮毂、断开调整,有时它包含更少,更多和不同的值-它因数组而异,由于它不同,我无法掌握如何将它插入到我的表任务Ps。数组始终包含用户id和客户id 我需要你关于如何插入阵列的建议 My insert-data.php文件 <?php if (isset($_POST['rep_list']))

我有一个数组
$workCard=$\u POST['rep\u list']
我想将数组插入我的mySQL
task

我面临的挑战是数组可能会有所不同,这意味着有时数组可能包含
用户:id、客户id、轮胎、轮毂、断开调整
,有时它包含更少,更多和不同的值-它因数组而异,由于它不同,我无法掌握如何将它插入到我的表
任务

Ps。数组始终包含
用户id
客户id

我需要你关于如何插入阵列的建议

My insert-data.php文件

<?php
if (isset($_POST['rep_list'])) {
  $workCard = $_POST['rep_list'];
//Insert into table TASK
//This is as far as I get since I have no idea on how to proceed inserting my array 
?>
Array
(
    [pickup] => 2014/11/07 15:45
    [tire_back] => tire_back
    [tire_reg] => tire_reg
    [hub_adjust] => hub_adjust
    [rim_adjust] => rim_adjust
    [break_pad_back] => break_pad_back
    [crankset] => crankset
    [crank] => crank
    [price_max] => 
    [price_approx] => 
    [service_1] => 1
    [service_2] => 2
    [service_3] => 3
    [service_4] => 4
    [message] => 
    [user] => 2
    [0] => 40405553

)
我的任务表如下所示:

CREATE TABLE `task` (
  `task_id` int(40) NOT NULL AUTO_INCREMENT,
  `user_id` int(40) NOT NULL,
  `customer_id` int(40) NOT NULL,
  `created` datetime NOT NULL,
  `tire` varchar(40) NOT NULL DEFAULT '',
  `tube` tinyint(1) NOT NULL,
  `hub` varchar(40) NOT NULL DEFAULT '',
  `rim` varchar(40) NOT NULL DEFAULT '',
  `spoke` tinyint(1) NOT NULL,
  `break_adjust` tinyint(1) NOT NULL,
  `break_cable` tinyint(1) NOT NULL,
  `break_pad` tinyint(1) NOT NULL,
  `gear_adj` tinyint(1) NOT NULL,
  `gear_cable` tinyint(1) NOT NULL,
  `gear_shift` tinyint(1) NOT NULL,
  `bicy_chain` tinyint(1) NOT NULL,
  `cog_wheel` tinyint(1) NOT NULL,
  `cassette` tinyint(1) NOT NULL,
  `chainwheel` tinyint(1) NOT NULL,
  `crankset` tinyint(1) NOT NULL,
  `crank` tinyint(1) NOT NULL,
  `fp_service` tinyint(1) NOT NULL,
  `price_max` int(10) NOT NULL,
  `price_approx` int(10) NOT NULL,
  `service` int(10) NOT NULL,
  `status` tinyint(1) NOT NULL,
  `pickup` datetime NOT NULL,
  PRIMARY KEY (`task_id`),
  KEY `customer_id` (`customer_id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `task_ibfk_1` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`),
  CONSTRAINT `task_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;

如果您希望表单字段和表中字段的名称之间具有灵活性(我不太确定这些字段在您给出的示例数据中如何匹配),那么我将执行以下操作

每个字段都有一个数组,其中的每个元素都是字段细节的数组。对于每个输入元素,在字段中循环,直到找到与该元素匹配的元素并分配值(如果找不到,将稍后使用默认值)

完成后,可以将这些值用作实际insert语句的参数

你可以用几种不同的方法来满足你的需要。例如,您可以交换数组是由输入名称还是字段名称设置关键帧

大概是这样的:-

<?php

$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

if (isset($_POST['rep_list'])) 
{
    $workCard = $_POST['rep_list'];

    $field_list = array('task_id'=>array('in_name'=>'task_id', 'value'=>"NULL"),
                         'user_id'=>array('in_name'=>'user_id', 'value'=>"0"),
                         'customer_id'=>array('in_name'=>'customer_id', 'value'=>"''"),
                         'created'=>array('in_name'=>'created', 'value'=>"''"),
                         'tire'=>array('in_name'=>'tire', 'value'=>"''"),
                         'tube'=>array('in_name'=>'tube', 'value'=>"0"),
                         'hub'=>array('in_name'=>'hub', 'value'=>"''"),
                         'rim'=>array('in_name'=>'rim', 'value'=>"''"),
                         'spoke'=>array('in_name'=>'spoke', 'value'=>"0"),
                         'break_adjust'=>array('in_name'=>'break_adjust', 'value'=>"0"),
                         'break_cable'=>array('in_name'=>'break_cable', 'value'=>"0"),
                         'break_pad'=>array('in_name'=>'break_pad', 'value'=>"0"),
                         'gear_adj'=>array('in_name'=>'gear_adj', 'value'=>"0"),
                         'gear_cable'=>array('in_name'=>'gear_cable', 'value'=>"0"),
                         'gear_shift'=>array('in_name'=>'gear_shift', 'value'=>"0"),
                         'bicy_chain'=>array('in_name'=>'bicy_chain', 'value'=>"0"),
                         'cog_wheel'=>array('in_name'=>'cog_wheel', 'value'=>"0"),
                         'cassette'=>array('in_name'=>'cassette', 'value'=>"0"),
                         'chainwheel'=>array('in_name'=>'chainwheel', 'value'=>"0"),
                         'crankset'=>array('in_name'=>'crankset', 'value'=>"0"),
                         'crank'=>array('in_name'=>'crank', 'value'=>"0"),
                         'fp_service'=>array('in_name'=>'fp_service', 'value'=>"0"),
                         'price_max'=>array('in_name'=>'price_max', 'value'=>"0"),
                         'price_approx'=>array('in_name'=>'price_approx', 'value'=>"0"),
                         'service'=>array('in_name'=>'service', 'value'=>"0"),
                         'status'=>array('in_name'=>'status', 'value'=>"0"),
                         'pickup'=>array('in_name'=>'pickup', 'value'=>"''"));

    foreach($workCard AS $workCard_key=>$workCard_value)
    {
        foreach($field_list AS $field_list_key=>$field_list_value)
        {
            if ($field_list_value['in_name'] == $workCard_key)
            {
                $field_list_value['value'] = $workCard_value;
            }
        }
    }

    $sql = "INSERT INTO task (user_id,
                             customer_id,
                             created,
                             tire,
                             tube,
                             hub,
                             rim,
                             spoke,
                             break_adjust,
                             break_cable,
                             break_pad,
                             gear_adj,
                             gear_cable,
                             gear_shift,
                             bicy_chain,
                             cog_wheel,
                             cassette,
                             chainwheel,
                             crankset,
                             crank,
                             fp_service,
                             price_max,
                             price_approx,
                             service,
                             status,
                             pickup)
            VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

    $stmt = $mysqli->prepare($sql);

    $stmt->bind_param('iiississiiiiiiiiiiiiiiiiiis', $field_list['user_id']['value'],
                          $field_list['customer_id']['value'],
                          $field_list['created']['value'],
                          $field_list['tire']['value'],
                          $field_list['tube']['value'],
                          $field_list['hub']['value'],
                          $field_list['rim']['value'],
                          $field_list['spoke']['value'],
                          $field_list['break_adjust']['value'],
                          $field_list['break_cable']['value'],
                          $field_list['break_pad']['value'],
                          $field_list['gear_adj']['value'],
                          $field_list['gear_cable']['value'],
                          $field_list['gear_shift']['value'],
                          $field_list['bicy_chain']['value'],
                          $field_list['cog_wheel']['value'],
                          $field_list['cassette']['value'],
                          $field_list['chainwheel']['value'],
                          $field_list['crankset']['value'],
                          $field_list['crank']['value'],
                          $field_list['fp_service']['value'],
                          $field_list['price_max']['value'],
                          $field_list['price_approx']['value'],
                          $field_list['service']['value'],
                          $field_list['status']['value'],
                          $field_list['pickup']['value']);

    $stmt->execute();
    $stmt->close();

您可以编写一个查询,该查询将插入所有列并只计算空白值。输入您需要的值,让其他值为空白?(将所有可能性放入db)p.s.您需要更改not nulldefault@jay-blanchard blank或
NULL
?实际上我会考虑两者。如果它真的很灵活(即,列几乎无限可变),我会尝试重新设计表,将每个字段拆分到另一个表上的不同行。但是,如果这些值与表列有非常直接的关系,那么我只需循环数组来构建相关的insert语句。