【问题标题】:Use regex to find variables into string使用正则表达式将变量查找到字符串中
【发布时间】:2019-01-17 06:06:43
【问题描述】:

我无法找到一些正则表达式来将多个 php 变量匹配到一个字符串中

下面是一个例子:

$var = "SELECT * FROM table WHERE admin='".$admin."' AND id=".$idclient." AND something=".$something;

所以实际上我需要匹配整个查询字符串并只替换变量,其中包含一个带有变量的函数()。

我需要的最终结果应该是这样的:

$var = "SELECT * FROM table WHERE admin='".functionname($admin)."' AND id=".functionname($idclient)." AND something=".functionname($something);

【问题讨论】:

  • 警告:尽可能使用prepared statements来避免在查询中注入任意数据并创建SQL injection bugs。在mysqliPDO 中执行这些操作非常简单,其中任何用户提供的数据都使用?:name 指示符指定,稍后使用bind_paramexecute 填充,具体取决于您是哪个使用。
  • 不要把这些东西放在一个字符串里。将它们放入一个数组中,然后使用array_map 重写数组的内容。

标签: php mysql regex variables replace


【解决方案1】:

如果我没有误解你的要求,那么你可以用regex这样尝试

<?php
$re = '/([$][a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)/m';
$str = '"SELECT * FROM table WHERE admin=\'".$admin."\' AND id=".$idclient." AND something=".$something;';
$subst = 'functionname($1)';
$result = preg_replace($re, $subst, $str);
echo $result;
?>

正则表达式: https://regex101.com/r/1Jg5FN/3

演示: https://3v4l.org/DXuMr

【讨论】:

  • PHP 变量语法描述为here。另外,如果你想用 PHP 本身编辑 PHP 代码(不陷入陷阱),最好的方法是使用tokenizer
  • @CasimiretHippolyte 感谢链接,正则表达式已更新
  • 使用正则表达式这样做是自找麻烦,尤其是,如果您稍后必须致电eval。这段代码有可能成为一个巨大的负担。
【解决方案2】:

如果你这样做,你可以更容易地解决这个问题:

$query = 'SELECT * FROM table WHERE admin=? AND id=? AND something=?';

$values = array_map('functionname', [ $admin, $idclient, $something ]);

然后您可以将该数组转发到您正在使用的任何执行方法。

【讨论】:

  • 是的,你是对的,但我忘了说我不需要基于脚本的解决方案,因为我将在几个文件和行上使用“查找和替换”功能代码
  • 这将是一个更大的问题。您需要将数据与代码分开,以便在那里取得成功。 PHP 的语法和许多编程语言一样,充满了惊喜。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2018-11-04
  • 1970-01-01
相关资源
最近更新 更多