如何使用第一个结果在第二个启动两个SQL查询?

时间:2012-01-23 13:41:56

标签: php mysql sql

我有2个查询,我想在第二个查询中使用第一个查询的结果 以下对我不起作用:

$id     = $_GET['uid'];
$app_id = $_GET['apid'];
$sql    = "insert into tbl_sc (client_id,status) values ($id,1)";
mysql_query($sql) or die ($sql);
$result = mysql_insert_id();
echo $result;

$sql    = "insert into tbl_ms(m_name, ng_ID, status)
           values ($app_id,$result ,1)";
$result = mysql_query($sql) or die ($sql);

有没有其他方法可以获得相同的结果?

5 个答案:

答案 0 :(得分:2)

您可以使用MySQL LAST_INSERT_ID()功能。这样所有插入id的混乱都将消失。

$sql    = "insert into tbl_sc (client_id,status) values ($id,1)";
if(mysql_query($sql)){
    $sql    = "insert into tbl_ms(m_name, ng_ID, status)
               values ($app_id, LAST_INSERT_ID() ,1)";
    $result = mysql_query($sql);
    if($result){
        // Process your result
    }else{
        // second query failed!
        die (mysql_error());
    }
}else{
    // first query failed!
    die (mysql_error());
}

答案 1 :(得分:1)

$result包含SQL资源,而不是id。

$insert_id = mysql_insert_id();
$sql = "INSERT INTO tbl_ms(m_name, ng_ID, status) 
        VALUES ($app_id, $insert_id, 1)";

不要忘记清理用户输入以避免注入攻击。

答案 2 :(得分:1)

代码中的

$result将始终包含布尔值,如果成功,则在下一个查询中使用时,它将始终为1。您echo d您需要的值,但您没有在变量中捕获它,因此可以在下一个查询中使用它。

试试这个:

$id = mysql_real_escape_string($_GET['uid']);
$sql = "INSERT INTO tbl_sc
          (client_id, status)
        VALUES
          ($id, 1)";
mysql_query($sql) or die ("MySQL error with query ( $sql ): ".mysql_error());

$app_id = mysql_real_escape_string($_GET['apid']);
$insertId = mysql_insert_id();
$sql = "INSERT INTO tbl_ms
          (m_name, ng_ID, status) 
        VALUES
          ($app_id, $insertId ,1)";
mysql_query($sql) or die ("MySQL error with query ( $sql ): ".mysql_error());

必须在查询中使用之前必须转义用户输入 - 您不希望从Bobby Tables访问...

答案 3 :(得分:1)

在第二个$insertedID = mysql_insert_id();变量之前创建一个变量$sql! 在第二个$sql查询中,将$result替换为$insertedID

它应该可以解决你的问题!

答案 4 :(得分:1)

在第二个查询中,只需使用

insert into tbl_ms(m_name, ng_ID, status)
           values ($app_id,last_insert_id() ,1)

无需通过PHP播放此内容!