SELECT LAST_INSERT_ID()适用于直接MySQL查询,但不适用于间歇PHP查询

SELECT LAST_INSERT_ID()适用于直接MySQL查询,但不适用于间歇PHP查询,php,mysql,Php,Mysql,(当我写这篇文章时,我记得它适用于MSSQL数据库没有问题,现在我正在使用SELECT LAST_INSERT_ID()而不是@SCOPE_IDENTITY为MySQL写同样的东西) 我有一段代码输入一家公司,然后输入该公司的客户详细信息。第一个SELECT LAST_INSERT_ID()可以很好地将公司ID从COMPANYS表插入到clients表,但在检索客户ID时会抛出一个错误 代码如下: ////设置初始SQL $SQLINSERTCOMPANY = "insert into comp

(当我写这篇文章时,我记得它适用于MSSQL数据库没有问题,现在我正在使用SELECT LAST_INSERT_ID()而不是@SCOPE_IDENTITY为MySQL写同样的东西) 我有一段代码输入一家公司,然后输入该公司的客户详细信息。第一个SELECT LAST_INSERT_ID()可以很好地将公司ID从COMPANYS表插入到clients表,但在检索客户ID时会抛出一个错误

代码如下: ////设置初始SQL

$SQLINSERTCOMPANY = "insert into companies(company_name,is_organisation,company_regno,company_url,is_active,entry_date)
            VALUES ('$company_name',$is_organisation,'$company_regno','$company_url',1,'$entry_date');";

$SQLINSERTCOMPANYDETAILS = "insert into clients (client_name,client_tel,client_mobile,client_email,client_usern,client_pwdx,mailing_list,savedsession,salt,company_id)
            VALUES ('$client_name','$client_tel','$client_mobile','$client_email','$client_email','$psw',$sign_up,'$PHPSESSIONID','$salt'";

$SQLUPDATECOMPANY = "update clients 
        set company_name = '$company_name',
        is_organisation = $is_organisation,
        company_regno = '$company_regno',
        company_url = '$company_url',
        is_active = 1,
        entry_date = '$entry_date' ";

$SQLUPDATECOMPANYDETAILS = "update clients 
            set client_name = '$client_name',
            client_tel = '$client_tel',
            client_mobile = '$client_mobile',
            client_email = '$client_email',
            client_usern = '$client_email',
            client_pwdx = '$psw',
            mailing_list = $sign_up,
            savedsession = '$PHPSESSIONID' ";

////get the cart for later use if the cart has items
$cart = $_SESSION['cart'];
if($cart){
    $strSQL = "select *
        from category_items 
        where category_item_id IN ($cart) order by category_items.item_code;";          
    $query_get_value = mysql_query($strSQL) or die ('query failed ' . mysql_error());
}   

///// add a new client here
if($_POST['action'] == "add"){  

    ////// Insert new company or just update the details
    if($no_of_client_entry == 0) {

        ////// update clients
        $strSQL1 = $SQLINSERTCOMPANY;

        ////// Insert Client Details
        $strSQL2 = $SQLINSERTCOMPANYDETAILS . ",(SELECT LAST_INSERT_ID())); SELECT LAST_INSERT_ID() as NEWID;";

        $sent_to = $client_email;
        $headers = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
        $headers .= "FROM: TheImageLounge<no-reply>";
        $subject = "Welcome to The Image Lounge";
        $message = "<html><head><title>Error Report</title>";
        $message .= "<style type='text/css'>
                        body{margin: 0 auto;text-align:left;}
                        h1, h2, h3 { margin:10px;padding:10px;background-color:#ccc;}                   
                     </style>";
        $message .= "</head><body>";

        $message .= "<p>Welcome to Website... TBC/p>";
        $message .= "<p>Your Details Are:</p>";
        $message .= "<p>Your username: $client_email<br />";
        $message .= "<p>Your password: " . $_SESSION['client_psw'] . "</p>";
        $message .= "<p>We hope that you will enjoy using our website.</p>";
        $message .= "<p>Thank You and best regards,<br />";
        $message .= "<p>The Website.</p>";
        $message .= "</body></html>";

        $sentOK = mail($sent_to,$subject,$message,$headers);    

    } else { ///// just update the client details

        $client_id = $clients_rows['client_id'];

        ////// update clients
        $strSQL1 = $SQLUPDATECOMPANY . " where client_id = $client_id;";

        ////// Insert Client Details
        $strSQL2 = $SQLUPDATECOMPANYDETAILS . " where client_id = $client_id; SELECT client_id as NEWID from clients where client_id = $client_id;";            

    } ///// End if
    ///echo $strSQL2;
    ///// Run transactions

    echo $strSQL1 . "<br />";
    echo $strSQL2;

    $query_insert_client = mysql_query($strSQL1) or die('' . mysql_error());
    $query_insert_clients = mysql_query($strSQL2) or die('' . mysql_error());   

    $last_client = mysql_fetch_assoc($query_insert_clients);
    $client_id =  $last_client['NEWID'];
    mysql_free_result($query_insert_clients);   
但是我得到了这个错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; SELECT LAST_INSERT_ID() as NEWID' at line 2
如果我将输出的SQL复制并粘贴到MySQL中,效果会很好。因此,我不确定第二个查询失败的原因。在使用MSSQL数据库时,这可以很好地工作

任何帮助都将不胜感激

谢谢


andi

您试图一次发送多个查询。从文档中:

mysql_query()发送唯一查询(不支持多个查询)


您可能还想考虑使用MySqLIsPixtTyId函数,而不是发布手动查询:

您尝试一次发送多个查询。从文档中:

mysql_query()发送唯一查询(不支持多个查询)

您可能还想考虑使用MySqLIsPixtTyId函数,而不是发布手动查询:

< P>选择LastIsIdTytIdId()是一个运行在MySQL中的查询,但是PHP只允许您一次运行一个查询,因此在查询中运行SELECTLASTIONEntTuxId()不起作用。 我的建议是为SELECT LAST\u INSERT\u ID()的值分配一个变量,并在查询中插入该变量。

SELECT LAST\u INSERT\u ID()是一个在mysql中运行的查询,但php只允许您一次运行一个查询,因此在查询中运行SELECT LAST\u INSERT\u ID()不起作用


我的建议是为SELECT LAST_INSERT_ID()的值指定一个变量,并在查询中插入该变量。

错误的不是SELECT语句,而是一次执行两条语句,这是PHP的MySQL库所不允许的。只需执行两个不同的查询即可解决问题。

错误的不是SELECT语句,而是一次执行两个语句,这是PHP的MySQL库所不允许的。只需执行两个不同的查询即可解决问题。

错误:
error:

 1. u did not close the insert tag

just do simple change
$addorder = "INSERT INTO table_name () 
                        VALUES  ()"; 
$id = "SELECT LAST_INSERT_ID() as new_id"; 
mysql_query($addorder) or die("not added in to the orders db:<br />".mysql_error()."<br />".$addorder."<hr />"); 
echo($id); 
1.u未关闭插入标记 做些简单的改变 $addorder=“插入到表中\u名称() 值()”; $id=“选择最后一个\u插入\u id()作为新的\u id”; mysql\u query($addorder)或die(“未添加到orders数据库:
。”.mysql\u error()。“
。”$addorder。”
”); echo($id);
错误:
1.u未关闭插入标记
做些简单的改变
$addorder=“插入到表中\u名称()
值()”;
$id=“选择最后一个\u插入\u id()作为新的\u id”;
mysql\u query($addorder)或die(“未添加到orders数据库:
。”.mysql\u error()。“
。”$addorder。”
”); echo($id);
使用
mysql\u query()

但是,您可以使用PDO来实现


为了实现您的目标,您可以完全删除
选择LAST\u INSERT\u ID()作为NEWID
并使用
mysql\u INSERT\u ID()
您不能使用
mysql\u query()同时运行两个查询
但是,您可以使用PDO来实现


为了实现您的目标,您可以完全删除
选择LAST\u INSERT\u ID()作为NEWID
并使用
mysql\u INSERT\u ID()

您好,谢谢。我已经调查过了,但想看看我是否能先弄清楚这一点。MSSQL_查询语句可以处理多个查询,所以可以想象MYSQL_查询也可以。您好,谢谢。我已经调查过了,但想看看我是否能先弄清楚这一点。MSSQL_查询语句可以处理多个查询,所以可以想象MYSQL_查询也可以。谢谢。好的,所以如果我能够用MSSQL_查询实现这一点,为什么MySQL语句不欣赏它呢?谢谢。好的,所以如果我能够用MSSQL_查询实现这一点,为什么MySQL语句不欣赏它呢?嗨,谢谢。我确实关闭了insert标记,但正如上面提到的,响应说我不允许在同一个函数中使用两个MySQL SQL语句。。。我想我可以做你的解决方案,或者使用上面提到的PHP版本mysql\u insert\u id。(抛硬币)是的,我能做到。嗨,谢谢。我确实关闭了insert标记,但正如上面提到的,响应说我不允许在同一个函数中使用两个MySQL SQL语句。。。我想我可以做你的解决方案,或者使用上面提到的PHP版本mysql\u insert\u id。(抛硬币)是的,我能做到。谢谢。MSSQL_查询允许我这样做,这就是我感到困惑的原因。谢谢。MSSQL_查询允许我这样做,这就是我感到困惑的原因。
error:

 1. u did not close the insert tag

just do simple change
$addorder = "INSERT INTO table_name () 
                        VALUES  ()"; 
$id = "SELECT LAST_INSERT_ID() as new_id"; 
mysql_query($addorder) or die("not added in to the orders db:<br />".mysql_error()."<br />".$addorder."<hr />"); 
echo($id);