【问题标题】:how to write values of an array to mysql table inside for each loop?如何为每个循环将数组的值写入内部的 mysql 表?
【发布时间】:2015-09-18 00:41:16
【问题描述】:

我已经通过 post 方法接收了一些数据我现在将数据写入数组我如何将数据写入 mysql 表?数据接收示例如下所示。我不断收到此错误:错误,查询失败

if (isset($_POST['submit'])) {
    $data = [];
    foreach($_POST['checkbox'] as $rowNum) {
        $data[] = explode("::", $_POST['opt'][$rowNum]);
    }
    var_dump($data);

    $sku =$data[$rowNum][0];
    $description =$data[$rowNum][1];
    $location =$data[$rowNum][2];
    $quantitydate =$data[$rowNum][3];

    $link = mysqli_connect("somesite", "****", "*******", "******");
    // Check connection
    if($link === false){
        die("ERROR: Could not connect. " . mysqli_connect_error());
    }

    $query ="SELECT * FROM Test WHERE sku = '$sku'";
    $testResult = mysqli_query($link, $query) or die('Error, query failed');    

    if(mysqli_fetch_array($testResult) == NULL){
        $sql = "INSERT INTO test (ID, sku, description, location, quantitydate) VALUES ('$ID','$sku', '$description','$location', '$quantitydate',NOW())";
        if(mysqli_query($link, $sql)){
            echo "Records added successfully.<br /><br />";
        } else{
            echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
        }

        // close connection
        mysqli_close($link);
    }else
        {
            echo "Record Already Exist<br /><br />";
        }
}

输出样本:

// Output sample (selected row 2 and 4):
array (size=2)
  0 => 
    array (size=4)
      0 => string 'SKU2' (length=4)
      1 => string 'DESC2' (length=5)
      2 => string 'LOC2' (length=4)
      3 => string 'QUAN2' (length=5)
  1 => 
    array (size=4)
      0 => string 'SKU4' (length=4)
      1 => string 'DESC4' (length=5)
      2 => string 'LOC4' (length=4)
      3 => string 'QUAN4' (length=5)

【问题讨论】:

  • 有什么问题?循环 $data 并使用每一行的值执行 INSERT INTO TABLE 查询。
  • 我编辑了我的帖子我尝试了上述方法,但不断收到此错误:错误,查询失败
  • die('Error, query failed') 更改为die(mysqli_error($link)),以便您查看失败的原因。
  • 为什么在INSERT 查询中同时传递$quantitydateNOW()?您的值比您分配给的列多。
  • $ID 变量在哪里?那应该是一个自动增量列吗?你可以把它放在INSERT之外,它会自动增加。

标签: php mysql arrays foreach


【解决方案1】:

使用准备好的语句:

$stmt = mysqli_prepare($link, "INSERT IGNORE INTO tableName (sku, description, location, quantitydate) VALUES (?, ?, ?, ?)";
mysqli_stmt_bind_param($stmt, "ssss", $sku, $desc, $location, $quantitydate);
foreach ($_POST['checkbox' as $rowNum) {
    $row = explode('::', $_POST['opt'][$rowNum]);
    $sku = $row[0];
    $description = $row[1];
    $location = $row[2];
    $quantitydate = $row[3];
    mysqli_stmt_execute($stmt);
    if (mysqli_affected_rows($stmt) == 0) {
        echo "SKU $sku already exists <br/><br/>";
    }
}

如果sku 列上有唯一索引,则无需先执行SELECT 查询。 INSERT IGNORE 将简单地忽略添加重复行的尝试,mysqli_affected_rows 将返回 0 以指示未插入任何内容。

【讨论】:

  • 感谢您的回复。我编辑了我的帖子。我不熟悉PDO。你能告诉我上面的代码有什么问题吗?
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
相关资源
最近更新 更多