我在linux(redhat)文件系统上有一堆php文件,大多数文件似乎没问题,因为他们使用抽象数据库交互的函数,但是我发现一些使用内联查询的地方而不是抽象层功能
这些查询似乎设计为与mysql一起运行,但我们正在运行Oracle,因此在检查空值时会出现故障,例如:
select name from user where name !=''
在Oracle中,此查询永远不会返回任何行,我需要像这样更改它:
select name from user where name !=' '
我已经能够在我现在经历的文件中解决这个问题。我想主动找到其他文件中出现这种情况的地方;但是,要检查的许多目录中有很多.php文件
是否可以在某个目录下的所有.php文件中运行搜索,以查找=''或!=''
等文本的出现情况这是来自/ lib /中使用嵌入式查询的文件之一的真实示例
$rs = $DB->get_recordset_sql (
"SELECT *
FROM {user}
WHERE confirmed = 1 AND lastaccess > 0
AND lastaccess < ? AND deleted = 0
AND (lastname = '' OR firstname = '' OR email = '')"
我正在考虑沿着这些行“”。* \''。* \“寻找嵌套在双引号内的双撇号的方法。 但是我对linux没有那么自信使搜索工作并能够遍历多个文件!
\$DB->.*".*''.*"
如果它在单行上有效,但显然不在我给出的例子中:现在使用SED在多条(n)行上进行匹配
答案 0 :(得分:1)
find topdir -type f -name '*.php' -exec grep -l "= *''" {} +
grep
一次操作一行,因此通过在双引号内查找撇号来匹配您的示例,因为它们位于不同的行上。所以我只是检查= ''
。
-l
选项打印匹配文件的名称,而不是打印匹配的行。