在远程数据库中插入134675值的最快方法

时间:2011-06-03 18:42:42

标签: php mysql insert

我有一个超过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或任何其他东西。

4 个答案:

答案 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事务并一次批量启动几百个查询,那么它可能会提高插入的可靠性和速度。

相关问题