[英]How to insert data as array values into MySQL?
job_no是主键
我想将描述保存为数组,当我向数据库中的一个作业插入许多描述时,最后的描述仅保存在已保存的数据库中,而我看不到其他描述。
var_dump($description)
:??
html
:??
PHP:
<?php
include ("connection.php");
$sel_type = $_POST["type"];
$ref_no = $_POST["refno"];
$in_date = date("Y-m-d", strtotime($_POST['date']));
$inv_to = $_POST["to"];
$inv_attn = $_POST["attn"];
$job_no = $_POST["jobno"];
$subject = $_POST["subject"];
$description = $_POST["descrip"];
if(!$_POST["submit"]){
echo "please fill out";
header('Location: index.php');
}
else{
if($description){
foreach($description as $c){
$sql = "INSERT INTO student(sel_type,ref_no,in_date,inv_to,inv_attn,job_no,subject,description)
VALUES('$sel_type','$ref_no','$in_date','$inv_to','$inv_attn','$job_no','$subject','$c')";
}}
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
?>
您要使用关系表。
创建一个名为job_description的新表:
CREATE TABLE job_description (
job_no_FK BIGINT,
description TEXT,
FOREIGN KEY (job_no_FK) REFERENCES student(job_no)
)
然后,您可以为职位编号添加多个描述
然后,您的php将变为:
<?php
include ("connection.php");
$sel_type = $_POST["type"];
$ref_no = $_POST["refno"];
$in_date = date("Y-m-d", strtotime($_POST['date']));
$inv_to = $_POST["to"];
$inv_attn = $_POST["attn"];
$job_no = $_POST["jobno"];
$subject = $_POST["subject"];
$description = $_POST["descrip"];
if(!$_POST["submit"]){
echo "please fill out";
header('Location: index.php');
}
else{
$sql = "INSERT INTO student(sel_type,ref_no,in_date,inv_to,inv_attn,job_no,subject)
VALUES('$sel_type','$ref_no','$in_date','$inv_to','$inv_attn','$job_no','$subject');";
if($description){
foreach($description as $c){
$sql.="INSERT INTO job_description(job_no_FK,description)
VALUES('$job_no','$c');";
}}
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
}
?>
另外,您还希望从第一个表中删除描述列:
ALTER TABLE student DROP COLUMN description
您可以使用serialize
功能将数组存储到数据库中,并使用反unserialize
在PHP代码中将它们用作数组。
您正在foreach循环内创建插入SQL。 但是插入SQL的执行是在foreach循环之外进行的。 因此,您需要在foreach循环内移动查询执行函数调用。
foreach($description as $c){
$sql = "INSERT INTO student(sel_type,ref_no,in_date,inv_to,inv_attn,job_no,subject,description)
VALUES('$sel_type','$ref_no','$in_date','$inv_to','$inv_attn','$job_no','$subject','$c')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
但是请记住,在循环内执行数据库操作是严格禁止的。 它会影响性能。 您可以尝试使用映射表或多插入查询 。
根据您的问题,您绝对应该使用关系表。
CREATE TABLE job_description (
id INT NOT NULL AUTO_INCREMENT,
description TEXT NULL,
job_no INT NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (job_no) REFERENCES student(job_no) ON DELETE CASCADE
);
但是,如果确实需要,请使用json_encode
(在插入/更新时)和json_decode
(在读取时)将数组存储在MySQL中。 优点是,与序列化数组相比,jsoned数组更易于阅读。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.