0

私は新しい学習者で、レコードの最後に挿入された ID を取得しようとしています。

しかし、ここでは次のエラーが表示されます。

エラー: SQL 構文にエラーがあります。1 行目の 'SELECT @p_customerId' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これを修正する方法はありますか。

ありがとう、

<?php
class MyConnection{ 
    var $db_host = '127.0.0.1';
    var $db_user = 'root';
    var $db_password = 'xxx';
    var $db_name = 'xxx';
    var $connection;

    function Connect(){
        $this->connection = @mysqli_connect($this->db_host, $this->db_user, $this->db_password) 
        or 
        die("Error: ".mysqli_connect_error());
        mysqli_select_db($this->connection, $this->db_name);
        mysqli_query($this->connection, "SET NAMES 'utf8'");
    }

    function Disconnect(){
        mysqli_close($this->connection);
    }

    function ExecSQL($query){
        $result = mysqli_query($this->connection, $query) or die('Error: '.mysqli_error($this->connection));
        return $result;
    }

    function LastInsertId() {
        return mysqli_insert_id();
    }
}

if (isset($_POST['btnSubmit'])) {
    $v_custname = mysql_real_escape_string($_POST['txtcustname']);
    $v_custphone = mysql_real_escape_string($_POST['txtcustphone']);
    $v_custemail = mysql_real_escape_string($_POST['txtcustemail']);

    $conn = new MyConnection();
    $conn->Connect();
    $conn->ExecSQL("CALL sp_customer('$v_custname','$v_custphone','$v_custemail',@p_customerId); SELECT @p_customerId;");
    echo $conn->LastInsertId();
    $conn->Disconnect();

}
?>

手順は次のとおりです。

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_customer`(IN `p_customerName` VARCHAR(50), IN `p_customerPhone` VARCHAR(50), IN `p_customerEmail` VARCHAR(50), OUT `p_customerId` INT)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
INSERT INTO customer(CustomerName, CustomerPhone, CustomerEmail)VALUES(p_customerName, p_customerPhone, p_customerEmail);
SELECT LAST_INSERT_ID() as p_customerId;
END
4

1 に答える 1

1

1 つのクエリで複数のステートメントを実行しようとしています。

これを読んでください:http://php.net/manual/en/mysqli.quickstart.multiple-statement.php

もちろん、クエリに追加した理由はわかりませんSELECT @p_customerId;...次のコード行は、とにかく最後の挿入 ID を要求します。それを取り出して、単一ステートメントのクエリを実行してみませんか?

于 2012-07-31T05:20:22.947 に答える