多次运行MySQL INSERT查询(将值插入多个表)

时间:2010-03-15 17:30:48

标签: php sql mysql insert

基本上,我有3张桌子;用户和项目,然后我有'users_projects'允许一对多组建。当用户添加项目时,我需要存储项目信息,然后存储在usersprojects表中的“userid”和“projectid”。听起来它真的很直接,但我觉得我的语法有问题!?

就目前而言,我将此作为我的INSERT查询(值分为两个不同的表):

$projectid = $_POST['projectid'];
    $pname = $_POST['pname'];
    $pdeadline = $_POST['pdeadline'];
    $pdetails = $_POST['pdetails'];

    $userid = $_POST['userid'];

$sql = "INSERT INTO projects (projectid, pname, pdeadline, pdetails) VALUES
   ('{$projectid}','{$pname}','{$pdeadline}','{$pdetails}')";


$sql =  "INSERT INTO users_projects (userid, projectid) VALUES
   ('{$userid}','{$projectid}')";

$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());
header("Location: frontview.php");
exit();

5 个答案:

答案 0 :(得分:1)

您只是忘了在每个查询之间执行sql。添加

 mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

在每个查询之间,你应该没事。

b.t.w(1)在sql日志(tail -f下)上使用/var/log/mysql/打开的控制台进行测试总是有帮助的 b.t.w.(2)您的代码中存在严重的安全问题 b.t.w(3)你可能想考虑使用PDO / Mysqli而不是旧的mysql扩展。 b.t.w(4)使用某种包装器(一个好的类)来接近数据库,而不是直接在代码中的任何地方直接使用,这会让你的生活更简单。

答案 1 :(得分:0)

是的,我要检查的两件事是

1)正在执行的查询?就像提到的其他海报一样,您是否在设置SQL之间执行SQL查询?

2)如果以某种方式打印/调试/显示您要插入的变量,它们是否会被填充?如果您看到插入的内容,但某些数据是空白的,那么之前可能会出现一些问题,这些变量将是空白的。

答案 2 :(得分:0)

我可能会误解,但是你是否正在使用标题(“Location:main.php”);在你的脚本中间?

答案 3 :(得分:0)

$projectid=mysql_insert_id($connection); 

我在第一次查询后调用了这个,这将从你的项目表中获取AutoIncrement值并将其存储在$ projectid中,然后第二个查询将使用它。 所以在执行我的第一个查询之后,我将上面的代码放在那里,而没有改变任何其他内容!!

答案 4 :(得分:0)

您似乎只尝试执行mysql_query()一次。您有两个查询,因此需要使用两次,每次查询一次:

$sql = "INSERT INTO projects (projectid, projectname, projectdeadline, projectdetails) VALUES
   ('{$projectid}','{$projectname}','{$projectdeadline}','{$projectdetails}')";
$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

$sql =  "INSERT INTO usersprojects (userid, projectid) VALUES
   ('{$userid}','{$projectid}')";
$result = mysql_query($sql, $connection)
    or die("MySQL Error: ".mysql_error());

或者,您可以使用mysqli_multi_query(),但这可能需要重新编写代码才能使用mysqli界面。