准备好的语句从多个 table 中选择值并将其插入到单个 table 中
Prepared statement selecting and inserting values from multiple tables into a single table
我正在尝试 select 来自 2 个不同 table 的“演员”、“电影”的值,并将它们插入到新的 table“关系”中。我正在使用 PHP 来执行此操作,但我对如何使用准备好的语句来执行此操作感到很困惑。
$firstNamesForDb = trim($_POST["firstNames"]);
$lastNameForDb = trim($_POST["lastName"]);
$movieForDb = trim($_POST["movieName"]);
$selectInsertQuery = "INSERT INTO relationships (actorid, movieid) SELECT actors.actorid, movies.movieid FROM actors, movies WHERE actors.first_names = $firstNamesForDb AND actors.last_name = $lastNameForDb AND movies.title = $movieForDb VALUES(?, ?)";
$statement = $db->prepare($selectInsertQuery);
$statement->bind_param("ii", actorid, movieid);
$statement->execute();
现在我收到错误:
Fatal error: Uncaught Error: Call to a member function bind_param() on
bool in D:\Apps\XAMPP\htdocs\iitajax\movies.php:82 Stack trace: #0
{main} thrown in D:\Apps\XAMPP\htdocs\iitajax\movies.php on line 82
第 82 行是 $statement->bind_param("ii", actorid, movieid);
我该如何解决这个问题?
我想你想要:
INSERT INTO relationships (actorid, movieid)
VALUES (
(SELECT actorid FROM actors WHERE first_names = ?),
(SELECT movieid FROM movies WHERE title = ?)
)
请注意,只要两个子查询中的每一个 returns 只有一行,这就是安全的 - 这大概是您的意图。否则,你会得到错误 subquery returns more than one row.
解决方法是使用 insert ... select
语法:
INSERT INTO relationships (actorid, movieid)
SELECT a.actorid, m.movieid
FROM actors a
CROSS JOIN movies m
WHERE a.first_names = ? AND m.title = ?
不过请注意此语法的含义:如果有多个演员具有相同的名字,或有几部电影具有相同的标题,那么所有这些都将插入到目标 table 中。
我正在尝试 select 来自 2 个不同 table 的“演员”、“电影”的值,并将它们插入到新的 table“关系”中。我正在使用 PHP 来执行此操作,但我对如何使用准备好的语句来执行此操作感到很困惑。
$firstNamesForDb = trim($_POST["firstNames"]);
$lastNameForDb = trim($_POST["lastName"]);
$movieForDb = trim($_POST["movieName"]);
$selectInsertQuery = "INSERT INTO relationships (actorid, movieid) SELECT actors.actorid, movies.movieid FROM actors, movies WHERE actors.first_names = $firstNamesForDb AND actors.last_name = $lastNameForDb AND movies.title = $movieForDb VALUES(?, ?)";
$statement = $db->prepare($selectInsertQuery);
$statement->bind_param("ii", actorid, movieid);
$statement->execute();
现在我收到错误:
Fatal error: Uncaught Error: Call to a member function bind_param() on bool in D:\Apps\XAMPP\htdocs\iitajax\movies.php:82 Stack trace: #0 {main} thrown in D:\Apps\XAMPP\htdocs\iitajax\movies.php on line 82
第 82 行是 $statement->bind_param("ii", actorid, movieid);
我该如何解决这个问题?
我想你想要:
INSERT INTO relationships (actorid, movieid)
VALUES (
(SELECT actorid FROM actors WHERE first_names = ?),
(SELECT movieid FROM movies WHERE title = ?)
)
请注意,只要两个子查询中的每一个 returns 只有一行,这就是安全的 - 这大概是您的意图。否则,你会得到错误 subquery returns more than one row.
解决方法是使用 insert ... select
语法:
INSERT INTO relationships (actorid, movieid)
SELECT a.actorid, m.movieid
FROM actors a
CROSS JOIN movies m
WHERE a.first_names = ? AND m.title = ?
不过请注意此语法的含义:如果有多个演员具有相同的名字,或有几部电影具有相同的标题,那么所有这些都将插入到目标 table 中。