php - MySQL 内部 for 循环。插入仅在第一个循环上运行

标签 php mysql arrays for-loop

我创建了一个 for 循环,用于循环遍历数组或从字符串分解的单词。 for 循环有效并且已经通过 echo 语句进行了测试。运行此代码时,它仅将 1 条记录插入数据库,而不是数组中的字符串数。

$item=explode(" ", $items);
for ($i = 0; $i < count($item); ++$i) {
    // Create connection
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO invlog (itemid, qty)
VALUES ('".$item[$i]."', '-1')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);    
    }

最佳答案

为了提高效率并避免多次数据库调用,您实际上应该只执行一次语句。

因此循环,创建查询,然后执行它。

就像这样..

$item=explode(" ", $items);
$query="";
 for ($i = 0; $i < count($item); ++$i) {
  // Build Query 
  $query.="(".$item[$i].",-1),";
 }
 $query = rtrim($query); // Remove last trailing comma from the right hand side of query string

 //Connect to database, and do DB stuff outside of loop in one call
 $conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
 // Check connection
 if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
 }
 $sql = "INSERT INTO invlog (itemid, qty)
 VALUES ".$query;

  if (mysqli_query($conn, $sql)) {
    echo "New records created successfully";
  } else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
  }

  mysqli_close($conn);    

关于php - MySQL 内部 for 循环。插入仅在第一个循环上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27073261/

相关文章:

python - 获取 np.nonzero 中 numpy 2d 切片的原始行

Ruby:4 字节数组到 int32

php - 使用 LIKE 和 OR 搜索

php - Paypal IPN 总是 "INVALID"- 字符集相关?

mysql - 如何优化查询以在执行主查询之前首先检查另一个表?

mysql - mysql如何引用列中的数据

python - 使用 numpy 数组/列表作为字符串的索引

php - 如何根据现有时间戳使用 PHP/MySQL 创建统计工具?

php - RIA 开发 : Coexistence of two MVC frameworks (client<->server)

mysql - 如何在没有完全权限的情况下传输 MySQL 数据库?