1 回答

TA貢獻1877條經驗 獲得超6個贊
我認為你只需要保留$name一個數組,不要將它分解回一個字符串,然后循環遍歷它。我不知道里面$give和其他人是什么。我看到它們是數組,但我不明白它們與$name. 下面的代碼執行此操作并插入 16 條記錄(假設有 4 個名稱):
// Store names in an array
$names = [];
foreach ($_SESSION['s'] as $key => $value) {
$names[] = $value;
}
$conn = mysqli_connect("localhost", "root", "", "slashbill");
$sql = 'INSERT INTO slashbill (member,give,receive,paid) VALUES (?,?,?,?)';
// Loop over names
foreach ($names as $name) {
for ($x = 0; $x <= 3; $x++) {
$stmt = $conn->prepare($sql);
if (!$stmt) {
die('Could not prepare statement');
}
if (!$stmt->bind_param('ssss', $name, $give[$x], $receive[$x], $paid1[$x])) {
die('Could not bind statement');
}
if (!$stmt->execute()) {
die('Could not execute statement');
}
}
}
但是,如果會話數據和您的其他變量之間存在某種神奇的關系,并且您真的只想插入 4 行,那么$x可以使用仍然跟蹤的這個版本。
// Store names in an array
$names = [];
foreach ($_SESSION['s'] as $key => $value) {
$names[] = $value;
}
$conn = mysqli_connect("localhost", "root", "", "slashbill");
$sql = 'INSERT INTO slashbill (member,give,receive,paid) VALUES (?,?,?,?)';
// Loop over names
for ($x = 0; $x <= count($names); $x++) {
$stmt = $conn->prepare($sql);
if (!$stmt) {
die('Could not prepare statement');
}
if (!$stmt->bind_param('ssss', $names[$x], $give[$x], $receive[$x], $paid1[$x])) {
die('Could not bind statement');
}
if (!$stmt->execute()) {
die('Could not execute statement');
}
}
我知道你說過你會擔心稍后會轉義它,但我只是將它切換為準備好的語句,因為它更容易為每個人準備。
- 1 回答
- 0 關注
- 123 瀏覽
添加回答
舉報