[英]PHP MySQL insert multiple rows with different IDs
我有下表:
id | message_id | recevier_id
1 | 8 | 2
2 | 9 | 5
3 | 14 | 4
我正在將數據發送到PHP文件以添加到上表中。 我的數據如下:
messageid =“ 2”接收者id =“ 5,6,34”
我正在嘗試添加具有不同“接收者ID”的多行,因此上述查詢的結果應為:
id | message_id | recevier_id
1 | 8 | 2
2 | 9 | 5
3 | 14 | 4
4 | 2 | 5
5 | 2 | 6
6 | 2 | 34
我當前的MySQL查詢如下所示:
<?php
$inputvalues = $_POST;
$errors = false;
$result = false;
session_start();
include_once '../../../includes/database.php';
$uid = $_SESSION['usr_id'];
$sendername = $_SESSION['firstnames'].' '.$_SESSION['surname'];
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
foreach ($inputvalues as $key => $value) {
if(isset($value) && !empty($value)) {
$inputvalues[$key] = $mysqli->real_escape_string( $value );
} else {
$errors[$key] = 'The field '.$key.' is empty';
}
}
if( !$errors ) {
$mysqli->query("
INSERT INTO `message_receiver_map` (`message_id`, `receiver_id`) VALUES ('".$messageid."', '".$inputvalues['receiverid']."');
");
$returnResult = "Success";
}
mysqli_close($mysqli);
echo json_encode(['result' => $returnResult, 'errors' => $errors]);
exit;
?>
我該如何實現?
您可以執行以下操作:
$messageid = "2"; // received value
$receiverids = "5,6,34"; // received value
$receiverid = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// prepare and bind
$stmt = $conn->prepare("INSERT INTO `table` (`message_id`, `receiver_id`) VALUES (?, ?)");
$stmt->bind_param("ss", $messageid, $receiverid);
foreach($rid in explode($receiverids)) {
// set parameters and execute
$receiverid = $rid;
$stmt->execute();
}
$stmt->close();
假設$ _POST中的2個字段存在
$_POST['messageid'] = "2"
$_POST['receiver id'] = "5,6,34"
然后可以像這樣完成3行的創建
請記住,一旦准備好帶有參數的查詢,該查詢便可以重復使用任意次,並且每次執行時都會使用新的參數值。
<?php
session_start();
include_once '../../../includes/database.php';
// this if should probably be in your database.php script
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ( isset($_POST['messageid'],$_POST['receiver id']) ){
// proceed to create the new rows
//create a query
$sql = "INSERT INTO `message_receiver_map`
(`message_id`, `receiver_id`)
VALUES (?,?)";
// prepare the query (send to server and compile it)
// now this query can be run multiple times with different
// parameter set each time it is executed
$stmt = $mysqli->prepare($sql);
// now for each receiver_id run the query
$rec_ids = explode($_POST['receiver id']);
foreach ($rec_ids as $rec_id) {
// bind the 2 parameters from this iteration to the query
$stmt->bind_value('ii',
$_POST['messageid'],
$rec_id);
// run query with these new params
$result = $stmt->execute();
}
}
}
?>
如果您使用的是INNODB數據庫,則還可以圍繞該事務包裝一個事務,這樣一來,您將創建所有3行,如果在創建3個新行時某處發生錯誤,則不會創建任何3行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.