小编Der*_*Ben的帖子

生成具有n个周期的有向图

我想生成一个有向图,其中包含指定数量的周期及其各自的长度.例如,图表应包含:

2 cycles of the size 3 
1 cycle of the size 5
  • 这样的算法是否已经存在?如果没有,那么解决这个问题的方法是什么?详细地,给出以下参数:

    1. 顶点的数量(例如,15)
    2. 组件数量(例如2)
    3. 必须在图中的循环(例如,{3循环,3循环,5循环})
  • 我只发现了几种能够检测现有图形中循环的算法(例如,Tarjan).您是否认为可以使用循环检测算法生成具有特定循环量的图形?

algorithm graph-theory directed-graph graph-algorithm cycle-detection

6
推荐指数
1
解决办法
444
查看次数

如何正确转义 SQL“LIKE”运算符的用户输入?(Postgres)

LIKE具有用户提供的输入的运算符

Postgres LIKE运算符对于向用户提供对表行的基本搜索非常有用。但是,用户为运算符提供的输入需要正确转义,因为正在解释LIKE某些字符(例如下划线 ( ))。_始终建议通过 Postgres准备好的语句传递用户提供的输入:

PREPARE getUsernames(text) AS
SELECT "name" FROM "users" WHERE "name" LIKE '%' || $1 || '%';
EXECUTE getUsernames('_')
Run Code Online (Sandbox Code Playgroud)

尽管通过预准备语句中的变量传递用户输入,但下划线会被LIKE运算符解释为通配符,以便上述 SQL 查询与 users 表中的每个条目相匹配。

建议的解决方案

用户期望搜索下划线返回包含name下划线字符的所有结果(而不是将其解释为通配符)。因此,我们必须转义用户输入,使其永远不会被LIKE操作员解释。Postgres 提供了转义字符的规范,默认情况下是反斜杠。所以每一个具有特殊含义的字符都必须使用这个转义字符进行转义。然而,保留字符黑名单感觉很容易出错,因为黑名单总是有可能不完整。因此,我提出的解决方案的想法是始终在用户输入的每个字符前面加上转义字符,无论它是否实际上会被解释。Postgres 接受这种不需要转义的字符转义。

以下是用 TypeScript 编写的用户输入转义的示例实现:

function escapePostgresLikeStr(str: string, escapeChar = '\\'): string {
  return str
    .split('')
    .map(char => `${escapeChar}${char}`)
    .join('');
}

Run Code Online (Sandbox Code Playgroud)

我没有找到有关此特定问题的任何信息,因此欢迎任何反馈、安​​全考虑和改进!:)

干杯,德贝努

sql postgresql user-input

5
推荐指数
1
解决办法
1442
查看次数