php - 使用 PHP 和 MySQLi 在不同的数据库表中插入变量和数组

标签 php mysql database database-design mysqli

我正在学习 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/

相关文章:

php - mysql/php/javascript/css 日历建议

mysql - MyISAM 锁定大型 select 语句

mysql - 在 ColdFusion 9 中将 HTML 格式的文本转换为常规文本

r - 如何根据列值选择行并在 R 中的大型数据框中以特定方式转换行

php - 为 SELECT...BETWEEN 查询创建正确的日期格式

php - PayPal IPN 停止工作 - curl 35 错误

php - 使用 PHP session 打开新的 Android Activity

mysql - 使用 View 或触发器预处理数据

mysql - 特定的MySQL批量插入性能调优

php - 我想制作删除按钮