簡體   English   中英

php只將最后一個數組記錄插入到sql中

[英]php inserts only last array record into sql

我有工作代碼,它將數據插入到 csv 文件中。 這是其中的一部分:

if (isset($_POST['array'])) {
        foreach ($_POST['array'] as $loop) {
            $txt = $txt . $loop['name'] . ";" . $loop['email'];
            $txt .="\n";
        }
    }

我希望將數據插入 mysql 數據庫而不是 csv,所以我只是將代碼更改為:

    if (isset($_POST['array'])) {
        foreach ($_POST['array'] as $loop) {

            $sql = "insert into persons (Name, Email)
                    values ('" . $loop['name'] . "', '" . $loop['email'] . "')";     
        }
    }

只有最后一條記錄被保存到人表中。 沒有錯誤,但沒有插入除最后一個之外的所有先前記錄。 為什么?

更好的方法是一次創建insert

if (isset($_POST['array'])) {
    $values = [];
    $sql = "insert into persons (Name, Email) values ";

    foreach ($_POST['array'] as $loop) {
        $values[] = "('" . $conn->real_escape_string($loop['name']) . "', '" . $conn->real_escape_string($loop['email']) . "')";     
    }

    if (!empty($values)) {
        $conn->query($sql . implode(', ', $values));
    }
}

它不起作用的原因是因為您從未在任何地方執行 SQL 查詢。

要執行查詢,您應該首先准備語句,然后綁定參數並執行。

// Your connection to DB
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'username', 'password', 'dbname');
$mysqli->set_charset('utf8mb4'); // always set the charset


if (isset($_POST['array'])) {
    $stmt = $mysqli->prepare('INSERT INTO persons (Name, Email) VALUES (?,?)');
    foreach ($_POST['array'] as $loop) {
        $stmt->bind_param('ss', $loop['name'], $loop['email']);
        $stmt->execute();
    }
}

請在循環內執行查詢,如下所示

...
$conn = mysqli_connect($servername, $username, $password, $dbname);
...

if (isset($_POST['array'])) {
    foreach ($_POST['array'] as $loop) {

        $sql = "insert into persons (Name, Email)
                values ('" . $loop['name'] . "', '" . $loop['email'] . "')";    
        $conn->query($sql);// Query should execute inside loop       

    }
}

我在將 JSON 數組插入 MySQL 時遇到了同樣的問題,並通過將mysqli_stmt->execute()函數放在foreach修復它

// loop through the array
foreach ($data as $row) {
    echo "Data has been Uploaded successfully <br>";
    // get the project details
    $id = $row['id'];
    $name = $row['name'];
    $togglCid = $row['cid'];
    // execute insert query
    mysqli_stmt_execute($sql);
}

這意味着它在每次循環后執行代碼

如果你想在循環外執行查詢嘗試使用如下

 if (isset($_POST['array'])) {
            $sql="";
            foreach ($_POST['array'] as $loop) {

                $sql .= "insert into persons (Name, Email)
                        values ('" . $loop['name'] . "', '" . $loop['email'] . "');\n";     
        }
    }

暫無
暫無

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

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