我有一个超过134675+值的数组,我需要将它们插入到我的mySQL表中。我知道使用PHP和mySQL数据插入所需的所有东西。是否有一种快速方法可以让我在30-60秒内在远程服务器上插入所有这些值?因为当我使用foreach
方法尝试时,页面会超时。远程服务器不允许DB连接持续超过60秒。我不知道为什么。所以请帮助我快速逻辑。
以下是我尝试的一些代码:
foreach($array as $value)
{
$sql="insert into collected values('".$value."')";
$res=mysql_query($sql);
//then some extra code.
}
注意 我在服务器上没有这么多的访问权限。我的数据库帐户只能插入值,只能插入值。它对mySQL DB的约束。我不能使用CSV或任何其他东西。
答案 0 :(得分:15)
您可以在循环中包含mysql_ping()
函数。此功能检查以确保连接已打开,如果不是,则重新连接。
使用您自己的示例,您可以执行以下操作:
foreach($array as $value) {
mysql_ping($dbconn);
$sql="insert into collected values('".$value."')";
$res=mysql_query($sql);
//then some extra code.
}
编辑:应该注意的是,根据文档,在MySQL 5.0.14之后,PHP不会自动重新连接。如果您使用较新版本的MySQL,则必须使用自己的连接逻辑,也许是这样(我还没有测试过):
function check_dbconn($connection) {
if (!mysql_ping($connection)) {
mysql_close($connection);
$connection = mysql_connect('server', 'username', 'password');
mysql_select_db('db',$connection);
}
return $connection;
}
foreach($array as $value) {
$dbconn = check_dbconn($dbconn);
$sql="insert into collected values('".$value."')";
$res=mysql_query($sql, $dbconn);
//then some extra code.
}
答案 1 :(得分:3)
我认为如果将值放在csv文件中并使用加载数据语法会更好。
修改。实施例
假设您有一个包含所有值的txt文件
value1
value2
value3
and so on
创建表结构后
create table mytest (
id int not null auto_increment primary key,
myvalue varchar(50)
) engine = myisam;
并上传您的txt文件,您可以执行此类操作
load data infile 'myfile.txt'
into table mytest (myvalue);
答案 2 :(得分:0)
我认为@ nick的答案是最好的 - 但另一种选择可能是编写SQL来创建一个列出所有插入的SP,即作为一个大字符串,通过线路发送,执行SP并删除它。 / p>
我自己也是MSSQL的人,我绝不会推荐这个 - 但是当我不能依赖MSSQL自己的批量上传功能时,我就不得不在通行证中使用这种疯狂的黑客攻击。
或者,您可以在SQL中构建多个insert语句并将其作为单个命令发送到DB吗?再次抱歉不是mysql专家,但这在其他数据库中很有可能。
答案 3 :(得分:0)
如果你可以使用MySQL事务并一次批量启动几百个查询,那么它可能会提高插入的可靠性和速度。