【问题标题】:Escape special characters from the database - MySql从数据库中转义特殊字符 - MySql
【发布时间】:2026-01-14 17:35:01
【问题描述】:

大家好,我需要在数据库中搜索数据,例如 123.456.789 即使我只输入了 123456789 ,我如何搜索它? 我需要从数据库中转义特殊字符,这样即使我搜索 123456789 它也可以显示像 123.456.789 这样的值。

这是我的查询:

SELECT *
FROM clients 
WHERE REPLACE(phone, '.', '') LIKE ".$searchtext."

...searchtext 是我正在寻找的号码。无论出现什么特殊字符,它都应该返回所有匹配的值。

【问题讨论】:

  • 请分享您的查询。
  • @user868766 这是我的查询SELECT * FROM clients WHERE REPLACE(phone, '.', '') LIKE ".$searchtext.",其中 searchtext 是我要查找的号码。无论出现什么特殊字符,它都应该返回所有匹配的值。
  • 这是我第一次看到普通点被认为是一个特殊字符...... :)
  • select * from clients where replace(phone,'.','') = '123456789';我创建的示例数据工作正常。你能告诉我们示例数据/表结构吗?
  • @ÁlvaroG.Vicario 哈哈,我们也考虑'-'

标签: php mysql database escaping


【解决方案1】:

@基尔

这是示例表和查询。请看看这是否可以帮助你。不确定您的表结构。

 CREATE TABLE `clients` (
 `id` int(11) NOT NULL,
 `phone` varchar(255) NOT NULL
 ) ENGINE=InnoDB;

INSERT INTO `test`.`clients` (
`id` ,
`phone`
)
VALUES (
 '1', '123.456.789'
), (
'2', '123.456.785'
);



mysql> select * from clients where replace(phone,'.','') = '123456789'; 
+----+-------------+
| id | phone       |
+----+-------------+
|  1 | 123.456.789 |
+----+-------------+

希望有帮助!

【讨论】:

  • 谢谢!现在我需要更换。 - 和空间,以便我可以得到 123.456.789 、 123-456-789 和 123 456 789 知道吗?我想在我的查询中添加 OR,但有没有更简单的方法?
  • 我做到了,谢谢!这是我的最终查询SELECT * FROM clients WHERE REPLACE(REPLACE(REPLACE(phone, '.', ''),'-',''),' ','') LIKE '".$searchtext."%' "谢谢!
【解决方案2】:
select phone from table_name 
 where  replace (cast (phone as text) , '.','')  like '%123456789%'

【讨论】:

    【解决方案3】:

    可以使用 MySQL 的 REPLACE() 函数:

    SELECT * FROM my_table WHERE REPLACE(my_column, '.', '') = '123456789';
    

    但如果my_column 只包含整数,你真的应该将其更改为 MySQL 的integer types 之一。

    【讨论】:

    • 您好,我这样做了,但没有成功这是我的查询:SELECT * FROM clients WHERE REPLACE(phone, '.', '') LIKE ".$searchtext." 其中 searchtext 是我正在搜索的数字。
    【解决方案4】:

    Replace() 是执行此操作的最佳函数:

    Select * from TableName where Replace(ColumnName,'escaping character','replaced character')='your Search option'
    

    对于您的情况,转义字符为dot(.),替换字符为'',搜索选项为'123456789'

    【讨论】:

    • 我想转义 # 字符,但我不能,当我转义时,我有 0 个结果,带有 , - 和黑色空间有效...但 #didnot 工作 SELECT id, titlu, link, poza, alt, keywords FROM istorie WHERE replace(replace(replace(replace(keywords, ',', ''), '-', ''), ' ', ''), '#', '') LIKE '%$keyword%' - 0 个结果和两个查询是 1 - (#test, bla) 而另一个 (test, bla) 没有 #,如果 SELECT 8 FROM istorie WHERE replace(replace(replace(keywords, ',', ''), '-', ''), ' ', '')) LIKE '%$keyword%' 只给我 1 个结果查询值 (#test, bla)