PHP MYSQL查询问题

时间:2014-07-31 02:12:55

标签: php mysqli

我很难过为什么我的PHP mysqli查询没有返回一致的结果。

例如,我运行以下查询,它给了我所有的电子邮件地址。

SELECT id, companyname, contactname, address1, city, postalcode, primaryphone, email 
FROM installers 
WHERE email LIKE '%@%'

如果我运行此查询,则无法获得结果:

SELECT id, companyname, contactname, address1, city, postalcode, primaryphone, email 
FROM installers 
WHERE email LIKE '%gmail%'

在数据库本地执行时,两个查询都可以正常工作。任何关于在哪里寻找下一步的想法都将非常感激。

根据要求使用代码进行更新:

<?php

error_reporting(E_ALL);
ini_set('display_errors', '1');
$search_output = "";

include '../sqlconnect.php';

if(isset($_POST['searchquery']) && $_POST['searchquery'] != ""){
$searchquery = mysqli_real_escape_string($conn, $_POST['searchquery']);
if($_POST['category'] == "id"){

    $sqlCommand = "SELECT id, email FROM installers WHERE id = '$searchquery'";

} else if($_POST['category'] == "email"){

    $sqlCommand = "SELECT id, email FROM installers WHERE email LIKE '%$searchquery%'";
}

    $query = $conn->query($sqlCommand) or die($conn->error.__LINE__);
    $count = $query->num_rows;

if($count > 1){
    $search_output .= "<hr />$count results for <strong>$searchquery</strong><hr />$sqlCommand<hr />";
    while($row = $query->fetch_assoc()){
        $id = $row["id"];
        $email = $row["email"];
        $search_output .= "

        <ul class=list-group style=font-size:13px>
            <li class=list-group-item> <strong>Company ID:</strong> &nbsp $id
            </li><li class=list-group-item> <strong>Email:</strong> &nbsp $email</li>
            </ul>

        ";
            } // close while
} else {
    $search_output = "<hr />0 results for <strong>$searchquery</strong><hr />$sqlCommand";
}
}
?>

<!doctype html>


<body>

<!-- body-content -->
<div class="body-content"><div class="section-inner">

<strong><div style="padding-left:5%; padding-bottom:10px; font-size:24px">Search</strong></div><br>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" class="form`horizontal">

    <div class="form-group">
    <div class="row">
        <div class="col-md-12">
        <label for="id" class="col-sm-3 control-label">Search Term</label>
        <div class="col-sm-5">
          <input type="text"  name="searchquery" class="form-control" id="searchquery" placeholder="Type search term here.."></div>

                <div class="col-md-4"> <button type="submit" name="search-btn" class="btn btn-default btn-default">
                    <span class="glyphicon glyphicon-search"></span> Search
                </button>

             </div>
           </div>
        </div>
      </div>

      <div class="form-group">
        <label class="col-sm-3 control-label">Search category:</label>
            <div class="col-sm-6">
                <select class="form-control" name="category" id="category">

                    <option value="id" selected="selected">Company ID</option>
                    <option value="email">Email</option>
                </select>
            </div>
        </div>
    </form>

    <?php echo $search_output; ?>

2 个答案:

答案 0 :(得分:0)

根据OP的要求,评论回答关闭问题的选项。

而不是LIKE '%$searchquery%'";将其更改为LIKE '%".$searchquery."%'";,但两者都应该有效,就像我在测试中一样。

Nota / edit:“搜索ID时,计数永远不会大于1,因为它是主键。由if($query->num_rows)解析通配符无法正常工作,因为它们需要连接在一起var $ searchquery。“ / OP的评论。

然而,$count = $query->num_rows; if($count > 1){取而代之的是if($query->num_rows){

即使使用if($count > 0)也可行,因为您希望查看结果是否大于零,意味着一个或多个,if($query->num_rows)的行为方式相同;如果找到包含您的查询的行。

可能发生的情况是,如果您的专栏只包含“一个”Gmail地址,则使用> 1将为FALSE。如果为TRUE,则使用>0(如果行包含一个或多个查询)。


另一种代替if($count > 0)的方法是if($count == true),它也有效。

答案 1 :(得分:-1)

是不是没有任何带有Gmail的电子邮件? 如果没有,你可以尝试以下代码,我希望它适合你。

$queryform = "SELECT * FROM installers WHERE email LIKE '%".gmail."%'";