正则表达式不适用于mysql_fetch_array

时间:2013-09-05 03:20:29

标签: php mysql sql regex arrays

如何在从mysql_fetch_array()返回的数组上执行搜索并替换为php?如果我使用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()的情况相同的情况。现在我知道代码是有效的,因为如果我输出print_r($item)并将结果复制到数组中它就可以了。我做错了什么或preg_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个条目,并且需要这些代码,例如上面的示例,因此我可以INSERT将它们product_id放入与product_id关系匹配的另一个表列中到描述<img>。我不是最好的SQL,但preg_replace()标签总是在代码之后,所以也许有一种方法可以用SQL做我不知道的事情?我在这一点上主要担心的是mysql_fetch_array()无法使用从{{1}}返回的数组,但在任何其他数组(关联,多维或非关联)上工作正常。从数据库返回的值有什么阻止我能够做到这一点?任何事情都会非常感激,我真的坚持这个!

1 个答案:

答案 0 :(得分:0)

在考虑了杰瑞必须说的话之后(在上面的评论中)我想出了这个决议,显然在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并且还在学校,所以我有很多学习,我讨厌不得不改变(更好习惯它,但是,好吧?)谢谢杰瑞:)