Php 多字段MySQL的搜索查询

Php 多字段MySQL的搜索查询,php,mysql,search,Php,Mysql,Search,任何人都可以帮助我。。。 这里有两个字段,一个是姓名,另一个是电子邮件。 我想按姓名或电子邮件搜索,但它不起作用,它只按姓名搜索 <?php $con = mysql_connect("localhost","root",""); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("chinmay", $con) or die("ERROR"); if(isset($_REQUEST['

任何人都可以帮助我。。。 这里有两个字段,一个是姓名,另一个是电子邮件。 我想按姓名或电子邮件搜索,但它不起作用,它只按姓名搜索

<?php
$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("chinmay", $con) or die("ERROR");


if(isset($_REQUEST['submit'])){
    $name=$_POST['name'];
    $email=$_POST['email'];
    $sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email ='%".$email."%'";
    $q=mysql_query($sql);
}
else{
    $sql="SELECT * FROM users";
    $q=mysql_query($sql);
}
?>
<form method="post">
    <table width="200" border="1">
  <tr>
    <td>Name</td>
    <td><input type="text" name="name" value="<?php echo $name;?>" /></td>
    <td>Email</td>
    <td><input type="text" name="email" value="<?php echo $email;?>" /></td>
    <td><input type="submit" name="submit" value=" Find " /></td>
  </tr>
</table>
</form>
<table>
    <tr>
        <td>Name</td>
        <td>Email</td>
        <td>Address</td>
    </tr>
    <?php
    while($res=mysql_fetch_array($q)){
    ?>
    <tr>
        <td><?php echo $res['fname'].' '.$res['lname'];?></td>
        <td><?php echo $res['user_email'];?></td>
        <td><?php echo $res['address'];?></td>
    </tr>
    <?php }?>
</table>


当我搜索姓名和电子邮件时,如何获取数据?

-和
-语句之间有一个主要区别。如果您想同时点击电子邮件和姓名,请使用
。另外,如果您使用的是%变量,请使用
LIKE
而不是
=
运算符,因为最后一个运算符比较值是否相等,而
LIKE
则通过匹配值进行比较

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' AND user_email LIKE '%".$email."%'";
之间的区别在于它们的值字段

 b1  |  b2  |  OR  |  AND
****************************
true | true | true | true
true | false| true | false
false| true | true | false
false| false| false| false

(b1=点击用户名,b2=点击电子邮件)这就是为什么它只使用
-语句选择用户名,因为它已经有了匹配项。

您的电子邮件有=项

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email ='%".$email."%'";
应该是

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' OR user_email like '%".$email."%'";
另一方面,如果电子邮件中没有类似的内容,它实际上是(=)尝试匹配数据库中的任何电子邮件,它们是%“$email”。%

您不能使用
=
并将变量包装在
%

试试这个:

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' 
       OR user_email like '%".$email."%'";
或者这个:

$sql=" SELECT * FROM users WHERE fname like '%".$name."%' 
       OR user_email ='".$email."'";

任何一个都应该有效。如果像另一个答案所建议的那样简单地将
更改为
,它仍然无法正常工作
user_email='%'“$email.”“%'”将找到以
%`开头和结尾的电子邮件地址。

Chinmay,我没有可用的SQL Server进行测试,但这里有一些东西可以尝试,可能会揭示原因

如果交换SQL表达式,让它先测试用户的电子邮件,会发生什么情况?
还是只搜索用户的电子邮件?
您可以记录SQL以确认其正确性吗?
正如詹姆斯所说,你打算在电子邮件上做一个相似或平等的搜索吗


另外,由于您直接从输入构建SQL(顺便说一句,这会让它受到SQL注入攻击),因此在MS SQL表达式中“@”是一个特殊字符?

非常适合于许多列/geeignet für sehr viele Spalten/dla wielu kolumny

  <?php


            //YOUR TABLE/DEINE TABELLE/TWOJA TABELA
            $table="table";
            //YOUR SEARCHSTRING/DEIN SUCHSTRING/SlOWO DO WYSZUKIWANIA
            $nichtsichererstring="searchstring";
            $suchstring=mysql_real_escape_string($nichtsichererstring);
            $query = "SELECT * from ".$table." where ( ";
            $results = mysql_query("DESCRIBE ".$table);
            $zaehler=mysql_num_rows($results);
            $x=1;
            while($row = mysql_fetch_array($results)) {
            $query = $query.$row["Field"]." LIKE '%".$suchstring."%' ";
            if($x<$zaehler){
            $query = $query." OR ";
            }
            $x++;
            }
            $query =$query.")";
            $result = mysql_query($query); 
            while ($row = mysql_fetch_array($result)) 
            { 
            //YOUR RESULTS!/DEINE ERGEBNISE/TWOJE WYNIKI
            echo $row["titel"];
            }

?>

  <?php


            //YOUR TABLE/DEINE TABELLE/TWOJA TABELA
            $table="table";
            //YOUR SEARCHSTRING/DEIN SUCHSTRING/SlOWO DO WYSZUKIWANIA
            $nichtsichererstring="searchstring";
            $suchstring=mysql_real_escape_string($nichtsichererstring);
            $query = "SELECT * from ".$table." where ( ";
            $results = mysql_query("DESCRIBE ".$table);
            $zaehler=mysql_num_rows($results);
            $x=1;
            while($row = mysql_fetch_array($results)) {
            $query = $query.$row["Field"]." LIKE '%".$suchstring."%' ";
            if($x<$zaehler){
            $query = $query." OR ";
            }
            $x++;
            }
            $query =$query.")";
            $result = mysql_query($query); 
            while ($row = mysql_fetch_array($result)) 
            { 
            //YOUR RESULTS!/DEINE ERGEBNISE/TWOJE WYNIKI
            echo $row["titel"];
            }

?>