使用PDO的SQLite3的多值INSERT

时间:2015-05-25 09:01:56

标签: php pdo sqlite sql-insert

我目前正在尝试使用SQLite3和PDO的多值INSERT查询。

我做了一些研究,发现在SQLite版本:3.7.11之前,不支持多值INSERT语法。此后(2012年)发生了变化。

我的phpinfo()告诉我:

PDO Driver for SQLite 3.x   enabled
SQLite Library  3.7.7.1

无论如何,PDO似乎不支持使用SQLite3来使用这些类型的INSERT查询。

我的问题是这个问题是否有任何解决方法。我正在开发一个兼容SQLite3和MySQL的应用程序。看到它们都支持多值插入,我不愿意使用两种查询和INSERT逻辑,因为PDO不是最新的。

一些编辑 - 添加代码细节:

打开数据库连接:

public function useSQLite3($file)
{
    $dsn = "sqlite:$file";
    $this->dbService = new PDO ($dsn);
    $this->dbService->query('PRAGMA journal_mode=WAL;');
    $this->dbService->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
}

处理DB的批量插入的方法:

public function bulkInsertLink(array $links)
{
    $insertRows = array();
    $placeholders = array();
    $j = 0;
    $i=0;
    foreach($links as $linkData) {
        $placeholders[$j] = '(';
        foreach($linkData as $columnData) {
            $placeholders[$j] .= '?,';
            $insertRows[$i] = $columnData;
            $i++;
        }
        $placeholders[$j] = rtrim($placeholders[$j], ',');
        $placeholders[$j] .= ')';
        $j++;
    }
    $query = 'INSERT INTO links (status, date, lang, group_ID, group_link_ID, link, sitemap_link) VALUES ';
    $query .= implode(',', $placeholders);
    $preparedQuery = $this->dbService->prepare($query);
    $preparedQuery->execute($insertRows);
}

$ links是一个数组,其中每个元素表示要插入的一行的信息。

1 个答案:

答案 0 :(得分:0)

使用PDO,您可以执行以下多值插入:

$statement = $pdo->prepare('INSERT INTO t VALUES (?, ?), (?, ?)');
$pdo->execute([1, 2, 3, 4]);

但我个人准备了一个插入语句,并使用不同的参数多次执行。