我创建了一个 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/