preg_match_all数组插入mysql数据库循环不能正常工作

时间:2013-09-03 12:12:14

标签: php mysql database

我正在尝试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] =&gt;排列        (            [0] =&gt; 290970571788        )

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

) 排列 (    [0] =&gt;排列        (            [0] =&gt; 271249191324        )

) 谢谢你。

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

1 个答案:

答案 0 :(得分:2)

不应该是

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

}

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

}

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

此外,您在WHERESELECT中使用相同的UPDATE条件,因此它会更新所有具有相同值的所选行(所有行都将匹配该条件)。