我正在尝试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。
答案 0 :(得分:2)
不应该是
{while ($row = mysql_fetch_assoc($query))
}
但
while ($row = mysql_fetch_assoc($query)) {
}
您不希望使用while
语句创建代码块,但是您想为其提供代码块。
此外,您在WHERE
和SELECT
中使用相同的UPDATE
条件,因此它会更新所有具有相同值的所选行(所有行都将匹配该条件)。