我想将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();
答案 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://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561
http://www.tech-recipes.com/rx/56738/one-to-one-one-to-many-table-relationships-in-sql-server/
另请阅读有关数据库原子性的信息 - 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)