如何使用列保存到数据库具有相同的值?

时间:2018-05-17 08:26:43

标签: php sql arrays database

我想将2种值保存到数据库中。第一列是"主题"第二个是"老师"。对于一个主题,有许多不同的教师姓名。例如,我如何添加" John"," Mary",#34; Tom"," Lena"与"主题"数学" ?

$pdo = new PDO('mysql:host=localhost;dbname=school', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$name=???
$subject="Math";
   $statement = $pdo->prepare("INSERT INTO teacher (name,subject) VALUES (:name,:subject)");
   $statement->bindParam(':name',$name);
   $statement->bindParam(':subject',$subject);
   $statement->execute();

2 个答案:

答案 0 :(得分:1)

您需要实现一对多关系。一个科目可以有很多老师,而老师可以属于很多科目。

教师表可能如下所示:

CREATE TABLE teachers (
    id int NOT NULL AUTO_INCREMENT,
    teacher varchar(255),
    subject_id int 
)

虽然主题表是这样的:

CREATE TABLE subjects (
    id int NOT NULL AUTO_INCREMENT,
    subject varchar(255),
)

现在有了这种关系,你可以加入2个表来获得你需要的东西。

SELECT * FROM subjects s LEFT JOIN teachers t on s.id = t.subject_id

这种方法非常标准,可以在一定程度上规范化您的数据库。

我建议你做一些关于人际关系的阅读,而我推荐的文章主要是google-d,我确定你可以找到一些更复杂的文章:

另请阅读有关数据库原子性的信息 - https://en.wikipedia.org/wiki/Atomicity_(database_systems)

答案 1 :(得分:0)

如果$math是一个带有名称的数组,您可以使用foreach

将它们插入数据库中
 $pdo = new PDO('mysql:host=localhost;dbname=school', 'root', '');
 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $sql = "INSERT INTO teacher (name,subject) VALUES (?,?)";
            try {
                $stmt = $conn->prepare($sql);
                foreach ($subject as $i => $subjects) {
                    $stmt->execute([$subjects, $math[$i]]);
                }
            } catch (\PDOException $e)