我想编写脚本,带有多个插入查询的函数.让我更好地解释一下.
我有一个quantity
html格式的输入.我有MySQL查询插入registered user
表中.所以我希望我的函数插入此次查询"数量"次.
mysql_query("INSERT INTO `pxlot` (realname,email,address,phone,status,regtime,ip)
VALUES ('$realname','$email','$address','$phone','0','$dateTime','$ip')")
or die (mysql_error()); // Inserts the user.
Run Code Online (Sandbox Code Playgroud)
例如插入3次.有什么建议?
Mic*_*ker 95
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4);
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.5/en/insert.html
Ali*_*waz 20
在大多数情况下,使用一个Insert语句插入多个记录在MySQL中比在PHP中插入带有for/foreach循环的记录要快得多.
我们假设$ column1和$ column2是由html表单发布的相同大小的数组.
您可以像这样创建查询:
<?php
$query = 'INSERT INTO TABLE (`column1`, `column2`) VALUES ';
$query_parts = array();
for($x=0; $x<count($column1); $x++){
$query_parts[] = "('" . $column1[$x] . "', '" . $column2[$x] . "')";
}
echo $query .= implode(',', $query_parts);
?>
Run Code Online (Sandbox Code Playgroud)
如果为两条记录发布数据,则查询将变为:
INSERT INTO TABLE(
column1
,column2
)VALUES('data','data'),('data','data')
Div*_*com 19
以下是一些方法
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
select '$realname','$email','$address','$phone','0','$dateTime','$ip'
from SOMETABLEWITHTONSOFROWS LIMIT 3;
Run Code Online (Sandbox Code Playgroud)
要么
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
select '$realname','$email','$address','$phone','0','$dateTime','$ip'
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip'
union all select '$realname','$email','$address','$phone','0','$dateTime','$ip'
Run Code Online (Sandbox Code Playgroud)
要么
INSERT INTO pxlot (realname,email,address,phone,status,regtime,ip)
values ('$realname','$email','$address','$phone','0','$dateTime','$ip')
,('$realname','$email','$address','$phone','0','$dateTime','$ip')
,('$realname','$email','$address','$phone','0','$dateTime','$ip')
Run Code Online (Sandbox Code Playgroud)
虽然使用单个INSERT
语句插入多行通常速度更快,但它会导致代码更复杂且通常不安全。下面我介绍了使用 PHP 一次性插入多条记录的最佳实践。
要同时向数据库中插入多条新行,需要遵循以下 3 个步骤:
INSERT
声明使用数据库事务可确保数据保存在一个整体中并显着提高性能。
PDO 是 PHP 中最常见的数据库扩展选择,使用 PDO 插入多条记录非常简单。
$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
// Start transaction
$pdo->beginTransaction();
// Prepare statement
$stmt = $pdo->prepare('INSERT
INTO `pxlot` (realname,email,address,phone,status,regtime,ip)
VALUES (?,?,?,?,?,?,?)');
// Perform execute() inside a loop
// Sample data coming from a fictitious data set, but the data can come from anywhere
foreach ($dataSet as $data) {
// All seven parameters are passed into the execute() in a form of an array
$stmt->execute([$data['name'], $data['email'], $data['address'], getPhoneNo($data['name']), '0', $data['regtime'], $data['ip']]);
}
// Commit the data into the database
$pdo->commit();
Run Code Online (Sandbox Code Playgroud)
mysqli 扩展使用起来有点麻烦,但其运行原理非常相似。函数名称不同,参数也略有不同。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new \mysqli('localhost', 'user', 'password', 'database');
$mysqli->set_charset('utf8mb4');
// Start transaction
$mysqli->begin_transaction();
// Prepare statement
$stmt = $mysqli->prepare('INSERT
INTO `pxlot` (realname,email,address,phone,status,regtime,ip)
VALUES (?,?,?,?,?,?,?)');
// Perform execute() inside a loop
// Sample data coming from a fictitious data set, but the data can come from anywhere
foreach ($dataSet as $data) {
// mysqli doesn't accept bind in execute yet, so we have to bind the data first
// The first argument is a list of letters denoting types of parameters. It's best to use 's' for all unless you need a specific type
// bind_param doesn't accept an array so we need to unpack it first using '...'
$stmt->bind_param('sssssss', ...[$data['name'], $data['email'], $data['address'], getPhoneNo($data['name']), '0', $data['regtime'], $data['ip']]);
$stmt->execute();
}
// Commit the data into the database
$mysqli->commit();
Run Code Online (Sandbox Code Playgroud)
这两个扩展都提供了使用事务的能力。使用事务执行准备好的语句极大地提高了性能,但仍然不如单个 SQL 查询。然而,这种差异可以忽略不计,为了简洁和干净的代码,多次执行准备好的语句是完全可以接受的。如果您需要更快的选项来一次将多条记录插入数据库,那么 PHP 很可能不是合适的工具。
归档时间: |
|
查看次数: |
135347 次 |
最近记录: |