SQL:LIKE子句匹配值

时间:2017-03-06 12:47:38

标签: php mysql sql-like

我有一个移动验证字段,如果我们输入数据库中相同的数字/值,如果值不存在,则会显示值存在的消息

以下是目前正在使用的查询: -

SELECT mobile FROM candidate_tabletest WHERE mobile  LIKE '%' '$mobile' '%' 

以上查询在某些情况下无效。例如,如果我们在数据库中有数字123456789,当我们在移动字段中键入代码或任何其他格式(如+ 91-123456789)时,它仍然表示手机号码可用。

此处参考我的移动字段HTML代码: -

<input type="text" class="form-control" id="mobile" name="mobile"    placeholder="mobile" value="+91" onkeyup="checkmobile();" > 

用于检查的PHP代码: -

  <?php

   $host = 'localhost';
   $user = 'root';
   $pass = '';

   mysql_connect($host, $user, $pass);

   mysql_select_db('appsrx1a_skyfler');

  if(isset($_POST['user_mobile']))
  {
   $mobile=$_POST['user_mobile'];

   $checkdata=" SELECT mobile FROM candidate_tabletest WHERE mobile  LIKE      '$mobile' '%' ";

    $query=mysql_query($checkdata);

   if(mysql_num_rows($query)>0)
  {
   echo '<span style="color:red;"><b>Mobile  Already Exists</b></span>';
  }
  else
    {
   echo '<span style="color:green;"><b> Available</b></span>';
     } 
 exit();
 }

如果数据库中存在号码(123456789),即使用户将手机号码键入为+ 91-123456789或任何其他格式。它应该发出警告信息,说明该号码已经存在。

2 个答案:

答案 0 :(得分:1)

你应该使用concat ..来构建一个合适的字符串模式

 SELECT mobile FROM candidate_tabletest WHERE mobile  LIKE concat( '%', '$mobile', '%' );

并且正如戈登·林诺夫(Gordon Linoff)所建议的那样,以取代违规的慈善事业

 SELECT mobile 
 FROM candidate_tabletest 
 WHERE mobile  LIKE concat( '%', REPLACE(REPLACE('$mobile', '-', '') , '+', ''), '%' );

如果您只需要手机号码的右侧部分,那么您可以使用

 SELECT mobile 
 FROM candidate_tabletest 
 WHERE mobile  LIKE concat( '%', SUBSTRING_INDEX('$mobile', '-', -1), '%' );

答案 1 :(得分:1)

一种方法是删除有问题的字符:

SELECT mobile
FROM candidate_tabletest
WHERE mobile LIKE REPLACE(REPLACE('%'.'$mobile'.'%', '-', '') , '+', '')

您也可以在应用程序层中执行此操作,因此$mobile仅包含数字(我认为是mobile列的格式)。