Php 准备好的语句选择多个表中的值并将其插入到单个表中

Php 准备好的语句选择多个表中的值并将其插入到单个表中,php,mysql,sql,subquery,sql-insert,Php,Mysql,Sql,Subquery,Sql Insert,我试图从两个不同的表中选择值,演员、电影,并将它们插入到一个新的表中。我正在使用PHP来实现这一点,我对如何使用准备好的语句来实现这一点感到非常困惑 $firstNamesForDb = trim($_POST["firstNames"]); $lastNameForDb = trim($_POST["lastName"]); $movieForDb = trim($_POST["movieName"]); $selectIn

我试图从两个不同的表中选择值,演员、电影,并将它们插入到一个新的表中。我正在使用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();
现在我得到了一个错误:

致命错误:未捕获错误:在上调用成员函数bind_param bool在D:\Apps\XAMPP\htdocs\iitajax\movies.php:82堆栈跟踪:0 {main}在第82行的D:\Apps\XAMPP\htdocs\iitajax\movies.php中抛出

第82行为$statement->bind_paramii、actorid、movieid

如何解决此问题?

我想您需要:

INSERT INTO relationships (actorid, movieid) 
VALUES (
    (SELECT actorid FROM actors WHERE first_names = ?),
    (SELECT movieid FROM movies WHERE title = ?)
)
请注意,只有当两个子查询中的每一个子查询只返回一行时,这才是安全的——这大概是您的意图。否则,子查询将返回多行

解决方法是使用插入。。。选择语法:


但是要注意这个语法的含义:如果有几个演员的名字相同,或者有几个电影的名字相同,那么所有的演员都将被插入到目标表中。

我更改了您的第一个建议,包括检查姓氏和名字。这很有意义,使我的代码更清晰;但是,返回的错误是相同的。我认为$statement->bind_paramii,actorid,movieid有问题;但是我没有经验知道为什么会抛出错误堆栈跟踪:0{main}。。。第84行的结果。第84行是bind_参数。我还尝试了第二个建议,但也导致了同样的错误。不过,第一个解决方案还是有效的,但我还没有足够的知识来理解为什么使用“?”来代替声明的变量。为了澄清这一点,$selectInsertQuery在直接放入phpmyadmin时可以工作,其中包含first_name、last_name和title的硬编码值。
INSERT INTO relationships (actorid, movieid) 
SELECT a.actorid, m.movieid
FROM actors a
CROSS JOIN movies m
WHERE a.first_names = ? AND m.title = ?