如何将数据作为数组值插入MySQL?

时间:2015-06-08 12:24:25

标签: javascript php 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();

}
?>

4 个答案:

答案 0 :(得分:1)

您想要使用关系表。

创建一个名为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

答案 1 :(得分:0)

您可以使用serialize函数将数组存储到数据库,并使用unserialize在PHP代码中将它们用作数组。

答案 2 :(得分:0)

您正在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;
}

}

但请记住,在循环内执行数据库操作绝对是禁止的。它阻碍了性能。您可以尝试使用映射表或multi-insert queries

答案 3 :(得分:0)

根据你的问题,你一定要使用关系表。

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数组比序列化数组更易于阅读。