MySQL 替代 find_in_set的方法
时间: 2023-07-06 12:27:12 浏览: 176
可以使用正则表达式来代替 MySQL 中的 find_in_set 函数,具体方法如下:
1. 使用正则表达式将逗号替换为 '|' 或者 '\n',例如:
```
SELECT * FROM table WHERE REGEXP_REPLACE(column, ',', '|') REGEXP '^keyword$';
```
2. 使用 FIND_IN_SET 和 CONCAT_WS 函数来实现,例如:
```
SELECT * FROM table WHERE FIND_IN_SET('keyword', REPLACE(column, ',', CONCAT_WS(',', ' ', ' '))) > 0;
```
需要注意的是,以上两种方法都不是 find_in_set 函数的完美替代品,可能会存在一些性能和精度上的问题。因此,在使用时需要根据具体情况进行选择和优化。
相关问题
mysql 替代find_in_set的方法
如果你需要在 MySQL 中查找包含某个值的行,但是不想使用 `find_in_set()` 函数,也可以使用 `like` 或 `regexp` 来实现。
使用 `like` 的例子:
```sql
SELECT * FROM my_table WHERE column_name LIKE '%value%';
```
使用 `regexp` 的例子:
```sql
SELECT * FROM my_table WHERE column_name REGEXP '[[:<:]]value[[:>:]]';
```
这两种方法都可以查找包含指定值的行,但是 `regexp` 更加灵活,可以使用正则表达式来匹配更加复杂的条件。
mysql 替代find_in_set的方法 注入的是字段
如果你需要在 MySQL 中替代 `find_in_set` 函数,并且需要进行防注入,可以使用 `FIND_IN_SET` 函数和参数绑定。具体实现可以参考以下示例:
假设你需要查询 `column1` 中是否包含输入的字符串,可以使用以下 SQL 语句:
```
SELECT * FROM table WHERE FIND_IN_SET(?, column1) > 0;
```
然后在代码中使用参数绑定的方式传递输入的字符串,例如在 PHP 中可以这样写:
```
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password');
$stmt = $pdo->prepare('SELECT * FROM table WHERE FIND_IN_SET(?, column1) > 0');
$stmt->execute(array($_POST['string']));
```
这样就可以避免 SQL 注入问题。
阅读全文