Php 我可以在sql查询条件中使用trim吗

Php 我可以在sql查询条件中使用trim吗,php,sql,Php,Sql,嗨,我正在数据库中创建反向电话号码查找。我有一个框,用户输入一个电话号码(在我的示例中,号码是01772708200无空格等),我要做的是查询我的sql数据库并返回匹配结果。问题是我的数据库包含数千个不同格式的数字(我应该在开始时格式化,但我没有),这些数字可能表示为01772 708200或01772 708 200等) 我已经包括了一个脚本,我认为这将修剪搜索条件,但它不工作的位 $value="01772708200" ; $condition = "TRIM(phone

嗨,我正在数据库中创建反向电话号码查找。我有一个框,用户输入一个电话号码(在我的示例中,号码是01772708200无空格等),我要做的是查询我的sql数据库并返回匹配结果。问题是我的数据库包含数千个不同格式的数字(我应该在开始时格式化,但我没有),这些数字可能表示为01772 708200或01772 708 200等)

我已经包括了一个脚本,我认为这将修剪搜索条件,但它不工作的位

    $value="01772708200" ; 
    $condition = "TRIM(phone1) LIKE '%$value%' ";
    $result = mysql_query("SELECT * FROM major WHERE $condition ")  ;
value是用户输入的数字,为清晰起见,此处仅显示为变量。
phone1是我的数据库表中名为major的电话号码

有人能告诉我我做错了什么吗

谢谢

仅删除前导空格和尾随空格,因此
01772 708200
仍将保持不变。您需要使用

您还可以使用运算符编写一些忽略其他
()-
的内容。

只删除前导空格和尾随空格,因此
01772 708200
仍将保持不变。您需要使用


您还可以使用操作符编写一些忽略其他
()-
的内容。

您可能需要执行以下操作

$condition = " REPLACE(phone1, ' ', '') LIKE '%$value%'";

你可能会想做类似的事情

$condition = " REPLACE(phone1, ' ', '') LIKE '%$value%'";

“修剪”仅删除左右两侧的空间。使用:

 REPLACE(REPLACE(col1, ' ', ''),'\t','')
替换空间和选项卡的所有实例


(顺便说一句,谷歌搜索SQL注入。:)

Trim只删除左右两侧的空格。使用:

 REPLACE(REPLACE(col1, ' ', ''),'\t','')
替换空间和选项卡的所有实例


(顺便说一下,谷歌搜索SQL注入。:)

TRIM只删除前导空格和尾随空格。为了清除中间的空格,您希望使用替换。
REPLACE(phone1, ' ', '')

修剪只删除前导空格和尾随空格。为了清除中间的空格,您希望使用替换。
REPLACE(phone1, ' ', '')

这个问题的答案是:是的,你可以,有时你必须

如果在数据进入数据库并包含前导空格或尾随空格之前,没有对数据进行任何清理,那么如果在不使用通配符的情况下搜索该术语,您会希望:

SELECT  name
FROM    tbl
WHERE   trim(name)='foo'
如果名称为“foo”,则不使用
trim()


对于您的特定问题: 它按预期工作,但您可能希望使用
replace()
regexp\u replace()
,具体取决于您使用的数据库以及实际数据的外观

  • Trim用于“修剪”单词边界开头和结尾的空格
  • 在某些数据库中,您需要使用
    btrim()
    来修剪前后
  • 在较旧的数据库中,可能需要结合使用
    ltrim()
    rtrim()
    来分别修剪左侧和右侧

  • 这个问题的答案是:是的,你可以,有时你必须

    如果在数据进入数据库并包含前导空格或尾随空格之前,没有对数据进行任何清理,那么如果在不使用通配符的情况下搜索该术语,您会希望:

    SELECT  name
    FROM    tbl
    WHERE   trim(name)='foo'
    
    如果名称为“foo”,则不使用
    trim()


    对于您的特定问题: 它按预期工作,但您可能希望使用
    replace()
    regexp\u replace()
    ,具体取决于您使用的数据库以及实际数据的外观

    • Trim用于“修剪”单词边界开头和结尾的空格
    • 在某些数据库中,您需要使用
      btrim()
      来修剪前后
    • 在较旧的数据库中,可能需要结合使用
      ltrim()
      rtrim()
      来分别修剪左侧和右侧

    嗯,TRIM对您没有帮助,因为它只会删除字符串开头或结尾的空格。您可以将$condition替换为:

    $condition = 'REPLACE(REPLACE(REPLACE(phone1,"/",""),"-","")," ","")';
    

    您可以嵌套更多的字符串,这样它就可以替换“/”、“-”和“.”以上的字符串。

    嗯,TRIM对您没有帮助,因为它只会删除字符串开头或结尾的空格。您可以将$condition替换为:

    $condition = 'REPLACE(REPLACE(REPLACE(phone1,"/",""),"-","")," ","")';
    

    您可以嵌套更多,这样它就可以替换“/”、“-”和“.”以上的内容。

    对于正在阅读本文并使用MSSQL的用户,我发现以下内容非常有用:


    (MSSQL中没有TRIM函数,但使用RTRIM和LTRIM就可以了)

    对于那些正在阅读并正在使用MSSQL的人,我发现这很有用:


    (MSSQL中没有微调功能,但使用RTRIM和LTRIM就可以了)

    用于哪个数据库?您的手机格式是否只有空格?trim()只删除开头和结尾的空格。我希望您逃过了用户输入,以防止SQL注入攻击,如:value=%';更新用户设置密码=md5('xxx'),其中username='admin'--@天哪,我敢肯定米克正在使用MYSQL——不仅他的脚本包含了
    MYSQL\u查询(“选择*
    ”),而且他之前的一些问题也包含了MYSQL标签。用于哪个数据库?你的手机格式唯一的问题是空格吗?trim()只删除开头和结尾的空格。我希望您转义了用户输入,以防止SQL注入攻击,如:value=%';UPDATE user SET password=md5('xxx'),其中username='admin';@OMG,我相当肯定Mick正在使用MYSQL-他的脚本不仅包括
    MYSQL\u查询(“选择*
    …,但他之前的一些问题也包括mysql标签。