0

我正在尝试 preg_match_all 在 mysql 字段中找到的前 12 位数字,并将该数字插入另一个字段,循环遍历 Select 语句的所有结果。我有以下内容,它仅放置在所有字段中找到的第一个结果,因此每个 field3 都插入相同的 12 位数字,该 12 位数字来自 Select 语句找到的最低唯一 ID 字段。对此的任何帮助将不胜感激。

<?php


$query = mysql_query("SELECT * FROM `dbase`.`table` WHERE field1 IS NOT NULL AND field3 IS NULL");
$regexp ='/[0-9]{12}/';

while ($row = mysql_fetch_assoc($query)){
$result=($row["field1"]);

preg_match_all($regexp,$result,$matches,PREG_PATTERN_ORDER);

foreach($matches[0] as $match => $where){
$id=($row["field2"]);
$sql="UPDATE `dbase `.`table ` set field3 = $where WHERE field2 = '$id'";

mysql_query($sql);
}
}
?>

我添加了

print_r( $matches );

并且输出是一个具有一个结果的数组,该数字被放置在所有字段中:

数组([0] => 数组([0] => 290970571788)

)

大括号更改修复了 print_r 输出以显示此格式的 12 位数字列表(仅显示前两个): Array ( [0] => Array ( [0] => 151104658286 )

) 数组 ( [0] => 数组 ( [0] => 271249191324 )

) 感谢那。

利用此处给出的答案和建议,我编辑了代码以显示最终的工作版本。最后一个大问题是让第二个选择语句使用数组结果,正确循环并将每个值插入正确的行中。还清理了第一个选择语句并从 preg_set_order 更改为 preg_pattern_order。

4

1 回答 1

2

不应该

{while ($row = mysql_fetch_assoc($query))

}

while ($row = mysql_fetch_assoc($query)) {

}

您不想使用while语句创建代码块,但您想为其提供代码块。

而且您使用的是相同WHERE的条件SELECTUPDATE因此它将更新所有具有相同值的选定行(所有行都将匹配该条件)。

于 2013-09-03T12:18:11.233 回答