我正在学习 PHP 和 MySQL,并且正在创建一个用于学习目的的电影网站。
我想将包含电影信息的变量和数组插入数据库,但在不同的表中。
这是我现在拥有的:
include('inc/connection.php');
$conn = dbConnect();
// create SQL
$sql = 'INSERT INTO movies (movieid, title, year, runtime, plot)
VALUES(?, ?, ?, ?, ?)';
// initialize prepared statement
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
// bind parameters and execute statment
$stmt->bind_param('isiis', $movieid, $title, $year, $runtime, $plot);
$stmt->execute();
}
这会将变量插入到电影表中。
但我还需要(同时)插入电影的类型、 Actor 、语言等......它们在数组中并进入不同的表(也可能在不同的行中)。例如,包含流派表中的流派( Action 、犯罪、戏剧)流派的数组,以及类型转换中的 Actor 等等……然后我将使用多对多和一对多表来显示信息。
有人可以向我解释如何做到这一点吗?我需要多次连接到数据库??我需要循环吗?我是 PHP 和 MySQLi 的新手,所以请尽可能多地解释。
谢谢。
最佳答案
INSERT
一次只支持一个表,因此如果您有复杂的数据进入多个表,您肯定必须执行多个 INSERT
语句。
如果您已将特定的 $movieid
值插入到 movies
中,那么您就知道需要将什么值插入到其他表的行中,以满足引用完整性(伪代码如下,不是完整的功能示例):
$movies_sql = 'INSERT INTO movies (movieid, title, year, runtime, plot)
VALUES(?, ?, ?, ?, ?)';
// execute ($movieid, ...)
$actors_sql = 'INSERT INTO movie_actors (movieid, actorid)
VALUES (?, ?)';
foreach ($actorlist as $actorid) {
// execute ($movieid, $actorid)
}
$lang_sql = 'INSERT INTO movie_languages (movieid, language)
VALUES (?, ?)';
foreach ($languagelist as $language) {
// execute ($movieid, $language)
}
如果您的 movies
表使用 AUTO_INCREMENT
主键,那么您可以通过调用 $mysqli->insert_id() 获取在第一个 INSERT
期间生成的值,或者使用内置函数 LAST_INSERT_ID()
。
$actors_sql = 'INSERT INTO movie_actors (movieid, actorid)
VALUES (LAST_INSERT_ID(), ?)';
foreach ($actorlist as $actorid) {
// execute ($actorid) -- only one param in this INSERT
}
请注意,LAST_INSERT_ID()
报告当前 session 期间自动生成的最新值,因此如果您插入到另一个使用自动主键的表,该值会发生变化。但是报告的值在您的 session 期间是稳定的;如果另一个客户端 session 同时执行插入操作,它不会改变。
关于php - 使用 PHP 和 MySQLi 在不同的数据库表中插入变量和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/621893/