0

如何对从返回的数组执行搜索并用 php 替换mysql_fetch_array()?如果我使用preg_replace()它将不会返回匹配项。有什么我想念的吗?这是我没有成功使用的东西,任何人都可以看看并告诉我我做错了什么,或者可能是实现这一目标的更好方法:

mysql_connect(DATABASE_HOST, DATABASE_USERNAME, DATABASE_PASSWORD)
    or die("<p>Error connecting to database: " . mysql_error() . "</p>");
mysql_select_db(DATABASE_NAME)
    or die("<p>Error selecting the database " . DATABASE_NAME . mysql_error() . "</p>");
$sql = "SELECT product_id,description FROM oc_product_description WHERE product_id >= 97 AND product_id <= 100";
$result = mysql_query($sql);
$pattern = '/^.*\b([0-9]{6}\s\D\d|[0-9]{6}\s\D[0-9]{2}|[0-9]{7}\s\D[0-9]{2})\b.*$/';
$replace = '$1';
while($row = mysql_fetch_assoc($result))
{ 
    $item[] = $row['description'];
}
foreach($item as $items)
{
    echo preg_replace($pattern, $replace, $items) . '<br>'; 
    echo '<br>';
}

这将做的只是返回与没有preg_replace(). 现在我知道代码有效,因为如果我输出 aprint_r($item)并将结果复制到数组中,它就可以正常工作。我是在做错什么,还是对从orpreg_replace()返回的数组不起作用?我可以将我的示例放在我将结果复制到数组中但不想浪费空间的地方。这是从数据库返回的项目和我试图与正则表达式匹配的字符串的示例。我需要删除所有内容,但比赛除外。mysql_fetch_assocmysql_fetch_array

从 $row['description'] 返回的一项:

1997 Suzuki VZ800 Marauder, Engine # 5506-111789, Kick stand and spring. Chrome on end is starting to chip. 0121103 S19 <img src = ">http://www.roofis27.com/motorcycle/13_01_21/103.JPG">

这是正则表达式返回的内容:0121103 S19

因此,因此我在数据库中有超过 20,000 个条目,其中包含类似这样的描述,并且需要从它们中删除上面示例中的这些代码,以便我可以将它们放入另一个与 descriptions 的关系INSERT匹配的表列中。我不是最好的 SQL,但标签总是在代码之后,所以也许有一种方法可以用我不知道的 SQL 来做到这一点?在这一点上,我主要关心的是为什么不适用于从. 从数据库返回的值是否有阻止我执行此操作的内容?任何事情都将不胜感激,我真的坚持这一点!product_idproduct_id<img>preg_replace()mysql_fetch_array()

4

1 回答 1

0

在考虑了 jerry 不得不说的内容之后(在上面的评论中),我想出了这个解决方案,显然返回的字符mysql_fetch_array()是不可见的,这就是正则表达式不起作用的原因。我使用preg_match()以下方法获得了更好的结果:

$sql = 'SELECT product_id,description FROM oc_product_description';
$sql1 = 'UPDATE db_product SET model = ';
$sql2 = 'WHERE product_id = ';
$pattern = '([0-9]{6}\s\D[0-9]{2}|[0-9]{6}\s\D\d|[0-9]{7}\s\D[0-9]{2})';
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result))
{
  $data[] = $row['description'];
  foreach($data as $datas)
  { 
    preg_match($pattern, $datas, $matches, PREG_OFFSET_CAPTURE);
  }
  foreach($matches as $match)
  {
    $Q1 = $sql1 . '"'. $match[0] . '"' . ' ';
  }
  $Q2 = $sql2 . $row['product_id'] .';';
  $query = $Q1 . $Q2;
  mysql_query($query);
  echo 'Product ID' . $row['product_id'] . ': ';
  printf("Records updated: %d\n", mysql_affected_rows());
  echo '<br>';
}

是的,我将开始使用 PDO 进行数据库缺点和查询,对它进行了一些研究,看起来很酷。只是我是 php 新手,还在上学,所以我要学习很多东西,我讨厌不得不改变(最好习惯它,嗯?)谢谢你 jerry :)

于 2013-09-05T14:15:08.367 回答