【问题标题】:PHP preg_replace with SQLPHP preg_replace 与 SQL
【发布时间】:2013-01-02 21:56:33
【问题描述】:

我正在尝试用数据库调用替换来自基本 CMS 的简单命令。

用户输入

[gallery id=x]

进入 CMS,我希望它消失,找到包含在该图库中的图像,并显示它们(为 jQuery Cycle 插件做好准备)

我可以得到:

$pattern = '/\[gallery id=(\w+)\]/i';
$rpl     = 'Display Gallery ID ${1}';
$bubble  = preg_replace($pattern, $rpl, $bubble);

...返回“Display Gallery 12”(例如)。但是我需要它来做到这一点:

$sql = "SELECT * FROM galleries INNER JOIN photos ON photos.PhotoGallery=galleries.GalleryID WHERE GalleryID='x'";
$set = mysql_query($sql);
echo '<div id="gallery">';
while($row = mysql_fetch_array($set))
{
 echo '<img src="'.$row['PhotoPath'].'" />';
}
echo '</div>';

【问题讨论】:

  • mysql_* 函数将是 deprecated in PHP 5.5。不建议编写新代码,因为它会在未来被删除。相反,MySQLiPDObe a better PHP Developer
  • 话虽如此,详细说明类似的东西
  • 你只是在问如何匹配并返回值而不是替换它?见preg_match
  • 我不知道他要什么。底部的查询与顶部的替换有何关系?是关于如何获取 x 的值以替换为 SQL 的问题吗?
  • @JasonMcCreary - 改为“需要这样做”。 [gallery id=XXX]命令中的ID号需要携带到SQL语句中(SELECT WHERE id=XXX)

标签: php mysql preg-replace


【解决方案1】:

您可以使用preg_replace_callback 函数,该函数获取正则表达式找到的每个匹配项,并将其替换为从提供的回调返回的字符串。所以你可以这样做:

function generateGallery($matches) {
    // generate the string here, $matches[1] will be your gallery id
    return "Gallery Content for Gallery " . $matches[1];
}

$pattern = '/\[gallery id=(\w+)\]/i';
$bubble = preg_replace_callback($pattern, generateGallery, $bubble);

【讨论】:

  • 这有什么普通preg_replace()做不到的?
  • 他想根据匹配标签中的id号执行SQL语句,并以这种方式生成替换。一旦知道了 id,generateGallery 回调给了他一个方便的地方。
  • 但不是将查询结果回显到页面中的便捷方式,除非它们恰好是替换的一部分。
  • 他在他的示例中使用了 echo,但他回显的是替换字符串。
【解决方案2】:

用途:

preg_match($pattern, $string, $matches);

此后,ID 为$matches[1]

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多