PHP循环中的SQL查询在第n次迭代后失败

时间:2014-06-19 10:11:27

标签: javascript php jquery mysql sql

Gus,

我有一个代码,它基本上将一堆记录复制到一个数据库中并将其复制到另一个数据库中。我需要为许多记录执行此操作,因此我构建了一个包含每次修改查询的变量的数组。这是我的数组的结构:

$array = [
["Brent_Chart_1", $List_Brent_Chart_1],
["Brent_Chart_2", $List_Brent_Chart_2],
["Brent_Chart_3", $List_Brent_Chart_3],
  et..... ]

这是循环通过数组并执行SQL查询:

foreach ($array as list($a, $b)) {
     $queryx = "
UPDATE `meetings_ss`
SET `".$a."`= (
    SELECT `Data`
    FROM `charts`
    WHERE `ID` = ".$b."
    )
ORDER BY `ID` DESC LIMIT 1;";

 mysql_query($queryx);
}

问题如下:由于某种原因,前九个记录按预期复制,然后没有任何内容从第十个复制。我知道变量名称等没有问题,好像我从第十个记录开始循环我得到了同样的问题:前九个被复制但是然后在第十个失败。

这让我觉得这是一个内存问题,或者这可能不是处理多个SQL查询的正确方法?任何人都可以提出一个理由,说明为什么会失败?

非常感谢你的时间。

2 个答案:

答案 0 :(得分:0)

您的订单和限制超出子查询..更新子句不能有“订单”或“限制”:)

尝试更改您的代码,如:

foreach ($array as $row) {
  $queryx = 'UPDATE meetings_ss SET 
      ' . $row[0] . ' = (SELECT Data FROM charts
    WHERE ID = ' . $row[1] . ' ORDER BY ID DESC LIMIT 1)';

  mysql_query($queryx);
}

答案 1 :(得分:0)

代码没有问题。问题在于DB结构和连续的SQL查询最终会破坏行大小:

#1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.