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


SQL queries in a PHP loop fails after n-th iteration

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);
}

问题如下:由于某种原因,前9条记录按预期复制,然后从第10条开始没有复制。我知道变量名等没有问题,如果我从第10条记录开始循环,我就会遇到同样的问题:前9条记录被复制,但在第10条记录失败。

这让我认为这是一个内存问题,或者也许这不是正确的方式来处理多个SQL查询?谁能给出一个失败的原因?

感谢您的宝贵时间。

您的订单by和limit不在子查询中。Update子句不能有"order"或"limit":)

试着这样修改你的代码:

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);
}

代码没有问题。问题在于数据库结构和连续的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.