Mysqli多查询的PHP程序准备语句

时间:2016-06-13 03:10:02

标签: php csv mysqli prepared-statement

我有一个使用fgetcsv打开CSV文件的PHP代码,然后读取每行,然后构建一个" Insert Into"查询并将其附加到名为$MyQuery的变量。当我尝试使用从公司网站下载的CSV文件中的信息更新数据库时,这是我最容易理解的方式。这正如我所期望的那样使用以下代码:

if (mysqli_multi_query($conn, $MyQuery))
{
    do
    {
        /* store first result set */
        if ($result = mysqli_store_result($conn))
        {
                    mysqli_free_result($result);
        }
    } while (mysqli_next_result($conn));
}

最近,我了解了准备好的陈述以及他们如何保护您的查询。

问题:如何使用Procedural Mysqli方式使用预处理语句进行多查询?我尝试过研究,很多人说这是不可能的。有人说这是可能的,但是通过为每个查询创建不同的变量对我来说是不可能的,因为我将从CSV文件向我的数据库插入超过10000条记录。有没有其他方法可以实现这一目标?

我认为可以通过遍历每个记录然后执行Insert Into的预准备语句版本来完成,但我认为执行10000 Insert Into SQL命令会非常慢。

1 个答案:

答案 0 :(得分:-1)

我不是100%肯定你在问什么,但是休息可能会奏效。首先,我将使用pdo连接到数据库。堕落只是我认为你想要做的基本轮廓。

$pdo = new PDO('mysql:host=localhost;dbname=mydatabase', 'myusername', 'mypassowrd');
$query = "
    INSERT INTO table (colum1, colum2, colum3)
    VALUES (:info1, :info2, :info3)
";
$stmt = $pdo->prepare($query);
do 
{
    $stmt->execute(array(':info1'=>$my_info1, ':info2'=>$my_info2, ':info3'=>$my_info3));
} while( your condition);

准备好的陈述有两个好处。首先是安全性,第二个允许一遍又一遍地更改值进行相同的查询。如果您准备它们,这将使每个查询都快速。

这是一个可以解释有关预准备语句的更多信息 http://php.net/manual/en/pdo.prepared-statements.php

我正在使用mysqli添加一种程序化方法。

$query = "
INSERT INTO table (colum1, colum2, colum3)
VALUES (?, ?, ?)
";
if ($stmt = mysqli_prepare($conn, $query)) 
{
    do
    {
    mysqli_stmt_bind_param($stmt, "sss", $my_info1, $my_info2, $my_info3);
    mysqli_stmt_execute($stmt);
    } while( your condition)
}  

我不确定你为什么使用mysqli_store_result(),mysqli_free_result()或mysqli_next_result()。因为插入行不会产生任何结果。