php - SELECT LAST_INSERT_ID() 在直接 MySQL 查询中有效,但在 PHP QUERY 中无效

标签 php mysql

(记住,当我写这篇文章时,它适用于 MSSQL 数据库,没有问题,现在我使用 SELECT LAST_INSERT_ID() 而不是 @SCOPE_IDENTITY 为 MySQL 编写相同的内容) 我有一段代码可以输入一家公司,然后输入该公司的客户详细信息。第一个 SELECT LAST_INSERT_ID() 可以很好地将company_id从companys表插入到clients表,但随后在检索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);   

现在,当我输出 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 数据库时工作得很好。

如有任何帮助,我们将不胜感激。

谢谢

安迪

最佳答案

您正在尝试一次性发送多个查询。来自文档:

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

您可能还想考虑使用 mysql_insert_id 函数而不是发出手动查询:http://www.php.net/manual/en/function.mysql-insert-id.php

关于php - SELECT LAST_INSERT_ID() 在直接 MySQL 查询中有效,但在 PHP QUERY 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6279579/

相关文章:

php - 使用 OkHttp 和 PHP 将文件从 Android 上传到服务器

php - PDO 和 MySQL 的 SQL 语法错误,而不是其他任何地方

Mysql 查找具有最长字段值的行作为文本的开头

java - 错误:com. mysql.jdbc.MysqlDataTruncation:数据截断:截断不正确的DOUBLE值:通过删除

php - 未显示 php 到 html 的输出

mysql - 数据库设计确保一对一关系

php - CakePHP 中的数据并发管理 - 行为/ Controller /模型?

php - 存储过程和mysql

php - 需要帮助查找错误,数据库中没有添加任何内容

php - 使用 php/apache 中的身份验证脚本保护目录中的文件