簡體   English   中英

SELECT LAST_INSERT_ID() 在直接 MySQL 查詢中工作,但不是間歇性 PHP QUERY

[英]SELECT LAST_INSERT_ID() works in Direct MySQL Query but not intermittently PHP QUERY

(當我寫這篇文章時,它適用於 MSSQL 數據庫沒有問題,現在我正在使用 SELECT LAST_INSERT_ID() 而不是 @SCOPE_IDENTITY 為 MySQL 寫同樣的東西)我有一段代碼進入公司然后該公司的客戶詳細信息。 第一個 SELECT LAST_INSERT_ID() 適用於將 company_id 從公司表插入到客戶表中,但隨后會引發錯誤以檢索 client_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);   

現在當我 output SQL 看起來像這樣:

insert into companies(company_name,is_organisation,company_regno,company_url,is_active,entry_date) VALUES ('Individual',0,'','',1,'2011-06-08 14:16:33');

insert into clients (client_name,client_tel,client_mobile,client_email,client_usern,client_pwdx,mailing_list,savedsession,salt,company_id) VALUES ('Andis','0777','','andrew@com','andrew@com','6be86ab8355979352cdd28bbe7026be71a196936fc1ab0c315629f68c0d5f9162acd20b201a27d0ced0cfd53a8e880a1e8bf3714833ed9c4cbe6d0fe3bf15ca0',0,'8730dfec5ce01b315e1a31007185c486','SALTYDOG',(SELECT LAST_INSERT_ID())); SELECT LAST_INSERT_ID() as NEWID;

但后來我得到這個錯誤

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 數據庫時工作正常。

任何幫助將不勝感激。

謝謝

和我

您正嘗試在一個 go 中發送多個查詢。 來自文檔:

mysql_query() 發送唯一查詢(不支持多個查詢)

您可能還想考慮使用 mysql_insert_id function 而不是發出手動查詢: http://www.php.net/manual/en/function.mysql-insert-id.ZE1BFD762321E409CEE4ACB8401

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); 

您不能使用mysql_query()同時運行 2 個查詢,但是您可以使用 PDO 執行此操作。

為了實現您的目標,您可以完全刪除SELECT LAST_INSERT_ID() as NEWID並使用mysql_insert_id()

SELECT LAST_INSERT_ID() is a query that runs in mysql, but php only allows you to run one query at a time, thus running the SELECT LAST_INSERT_ID() within your query does not work.

我的建議是將變量分配給 SELECT LAST_INSERT_ID() 的值,然后在查詢中插入變量。

It's not the SELECT statement that's wrong, it's the fact that you're doing two statements in one go, which is not allowed by the MySQL library of PHP. 只需執行兩個不同的查詢即可解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM