簡體   English   中英

為什么創建表然后插入多個值會返回錯誤?

[英]Why does creating a table and then inserting multiple values return an error?

所以我試圖創建一個表,然后向其中插入多個值,如下所示:

        $servername = "localhost";
        $username = "root";
        $password = "";
        $dbname = "someDbName";
        $conn = mysqli_connect($servername, $username, $password, $dbname);
                if (!$conn) {
                    die("Connection failed: " . mysqli_connect_error());
                }
                    $sql = "CREATE TABLE IF NOT EXISTS someTableName(
                    someID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                    someVar1 VARCHAR(30) NOT NULL,
                    someVar2 INT NOT NULL);
                    INSERT INTO someTableName (someVar1 , someVar2 ) VALUES ('someString1', someInteger1),
                    ('someString2',someInteger2);";

當然,其中someInteger位是整數。 接着:

            $sql = mysqli_real_escape_string($conn, $sql);    
            if (mysqli_multi_query($conn, $sql)) {
                dtconsole("Tables populated successfully");
            } else {
                dtconsole("Error creating table: " . mysqli_error($conn));
            }

使用dtconsole函數,可以將其輸出到控制台以幫助我進行調試。

function dtconsole($data){
        $output=$data;
        if(is_array($output)){
            $output=implode(',',$output);
        }
        echo '<script>console.log("'.$output.'");</script>';
    } 

每當我嘗試運行此命令時,它都會返回以下錯誤:

建立表格時發生錯誤:您的SQL語法有錯誤; 檢查與您的MariaDB服務器版本相對應的手冊,以找到在第1行“ someID INT(6)UNSIGNED AUTO_INCREMENT PRIMARY KEY,”附近使用正確的語法

而且我一生都看不到我在做什么錯。

您的問題是您要在整個查詢中調用mysqli_real_escape_string ,而不是僅插入要插入的值。 結果,它將$ sql字符串中的CR-LF轉換為\\r\\n ,這是MySQL解析器無法解釋的。 您應該這樣做:

$someString1 = mysqli_real_escape_string($conn, 'someString1'); 
$someString2 = mysqli_real_escape_string($conn, 'someString2');
$sql = "CREATE TABLE IF NOT EXISTS someTableName(
        someID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        someVar1 VARCHAR(30) NOT NULL,
        someVar2 INT NOT NULL);
        INSERT INTO someTableName (someVar1 , someVar2 ) VALUES ($someString1, someInteger1),
        ($someString2,someInteger2);";
if (mysqli_multi_query($conn, $sql)) { 
    ...

暫無
暫無

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

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