Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO-带问号参数的批量更新语句,提示?_Php_Parameters_Pdo_Updates_Bulk - Fatal编程技术网

Php PDO-带问号参数的批量更新语句,提示?

Php PDO-带问号参数的批量更新语句,提示?,php,parameters,pdo,updates,bulk,Php,Parameters,Pdo,Updates,Bulk,我想每24小时更新一次MySQL表,其中包含来自给定汇率服务的最新货币符号和值对 现在,我做了这样的事情: foreach ($currencies->rates as $currency => $rate) { $connection->addQuery("update/{$currency}", "UPDATE `i18n/currencies` SET `rate` = ? WHERE `code` = ?;", $rate, $currency); } $co

我想每24小时更新一次MySQL表,其中包含来自给定汇率服务的最新货币符号和值对

现在,我做了这样的事情:

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

$connection->output();
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` = ?; 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);
}
我从JSON编码的响应中得到
$currences
对象,
$connection
是对我的数据库连接类的引用

如果要创建SQL查询组(我创建该类是为了执行批量命令),语法如下:

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

$connection->output();
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` = ?; 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);
}
这样,如果我有以下一组查询(查询后有它们的最终值):

最后一个字符串如下所示:

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

$connection->output();
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` = ?; 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);
}
查询的准备和执行如下:

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

$connection->output();
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` = ?; 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通过这样的参数真的可以进行批量更新吗?还是我还没有发现的另一种方式?也许这根本不可行,我只是很固执。我可以用一个SQL查询重写这个更新脚本,因为我的连接类会从第一个查询到最后一个查询

你能给我一个提示吗