我正在寻找一种SQL注入安全技术,可以用PHP和Mysqli同时插入大量行(约2000)。
我有一个数组,其中包含所有必须包含的值。目前我正在这样做:
<?php
$array = array("array", "with", "about", "2000", "values");
foreach ($array as $one)
{
$query = "INSERT INTO table (link) VALUES ( ?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);
$stmt->execute();
$stmt->close();
}
?>
我尝试了call_user_func_array(),但它导致了堆栈溢出。
有什么更快的方法可以做到这一点(比如一次插入它们?),但仍然可以防止SQL注入(比如准备好的语句)和StackOverflows?
谢谢!
再试一次,我不明白为什么您的原始代码在轻微的修改下就不能工作了:
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);
foreach ($array as $one) {
$stmt->execute();
}
$stmt->close();
您应该可以通过将插入内容放入事务中来大大提高速度。您还可以将prepare和bind语句移到循环之外。
$array = array("array", "with", "about", "2000", "values");
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);
$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
$stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");
编辑:
我在我的web服务器上用10,000次迭代测试了这段代码。
不带事务:226秒。
带事务:2秒。
或一个两个数量级的速度提升
,至少对于那个测试是这样的。
问题内容: 我正在寻找一种SQL注入安全技术,以便通过PHP和MySQLi一次插入很多行(大约2000年)。 我有一个必须包含所有值的数组。目前,我正在这样做: 我尝试了call_user_func_array(),但是它引起了stackoverflow。 什么是更快的方法(例如一次将它们全部插入?),但是仍然可以防止SQL注入(如准备好的语句)和stackoverflows呢? 谢谢! 问题答案
问题内容: 我有一个特定日期的汇率表: 我想基于简单的线性插值获得输出速率。 因此,如果我输入17/06/2011: 线性插值是 有没有一种方法可以执行简单的查询(SQL Server 2005),还是需要以编程方式(C#…)完成这种工作? 问题答案: 像这样的东西(已更正):
问题内容: 我正在寻找一种在Oracle 9数据库中执行多行插入的好方法。以下内容在MySQL中有效,但Oracle似乎不支持以下内容。 问题答案: 这在Oracle中有效: 这里要记住的是使用语句。
问题内容: 假设我们要在表格中插入多行: 使用PDO: 现在,您应该如何继续插入行?像这样? 还是像这样? 哪种方法更快更安全?插入多行的最佳方法是什么? 问题答案: 您至少有以下两个选择: 如您所见,第一个版本具有许多简单的代码;但是第二个版本确实执行了批量插入。批处理插入应该更快,但是我同意 @BillKarwin的观点 ,在绝大多数实现中性能差异不会被注意到。
我有一个游戏,在MySQL数据库中存储boss在简单模式和硬模式下的杀人记录。有14个老板。我想存储一个球员杀死一个老板的次数和难度。我有几个选择,我可以看到。。 为每个boss以及每个难度在表中创建一个单独的列。例如。 创建两个存储数字序列的字段,这些数字可以稍后提取出来,以便在PHP中进行比较。其中easykills是一个由28个字符组成的字符串,每2个字符就有一个计数器,用于计算boss被杀
问题内容: 在iPhone上,使用FMDB获取SQLite数据库中最后插入的行的ID的最佳方法是什么? 有没有比做更好的方法: 问题答案: 如果可以保证您的列是自动递增的列,那很好。 但不管怎样,有一个专门的SQLite函数称为: 在FMDB中,您使用方法(在内部运行上述方法):