PDO - 带有问号参数的批量UPDATE语句,提示?

时间:2013-11-10 15:02:37

标签: php parameters pdo updates bulk

我想更新一个包含最新货币符号的MySQL表格&每24小时从一次特定汇率服务中获得价值对。

现在,我这样做:

foreach ($currencies->rates as $currency => $rate) {
    $connection->addQuery("update/{$currency}", "UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?;", $rate, $currency);
}

$connection->output();

我从JSON编码的响应中获取$currencies对象,$connection是对我的数据库连接类的引用。

如果我想创建一个SQL查询组(我创建的类来执行批量命令),语法将是这样的:

if (!empty($this->attributes["queries"])) {
    $queries = implode(" ", array_map(function ($input) { return (mb_strpos($input->attributes["query"], ";") !== false ? $input->attributes["query"] : "{$input->attributes["query"]};"); }, $this->attributes["queries"]));
    $parameters = [];

    foreach ($this->attributes["queries"] as $query) {
        if (!empty($query->attributes["parameters"])) {
            $parameters = array_merge($parameters, $query->attributes["parameters"]);
        }
    }
}

这样,如果我有以下一组查询(在查询后有最终值):

UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; [1.7, AED]
UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; [2.1, BYR]
UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; [0.7, EUR]
UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; [1.1, GBP]

最后一个字符串是这样的:

UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?; [1.7, AED, 2.1, BYR, 0.7, EUR, 1.1, GBP]

查询的准备和执行方式如下:

if ($output = $this->attributes["references"]["parent"]->attributes["link"]->prepare($queries, [\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY])) {
    $result = ($output->execute((!empty($parameters) ? $parameters : null)) ? true : false);
}

但它不起作用。我已经对我的代码进行了不同的修改,但它们似乎都没有为我提供我正在寻找的解决方案。

是否真的可以通过PDO传递BULK更新这样的参数?或者这是我还没有发现的另一种方式?也许它根本不可行,我只是固执。我可以用单个SQL查询重写这个更新脚本,因为我的连接类将从第一个到最后一个连接它。

你能给我一个提示吗?

0 个答案:

没有答案