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语句。