繁体   English   中英

PHP MYSQL查询问题

[英]PHP MYSQL Query Issues

我很困惑为什么我的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; ?>

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

代替LIKE '%$searchquery%'";将其更改为LIKE '%".$searchquery."%'"; 但它们都可以正常工作,就像我在测试中一样。

声明/编辑: “在搜索ID时,计数永远不会大于1,因为它是主键。由if($query->num_rows) 。通配符不能正常工作,因为它们需要与var $连接。搜索查询。” / OP的评论。

但是,而不是$count = $query->num_rows; if($count > 1){ $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)也可以。

会不会是没有电子邮件的gmail吗? 如果没有,您可以尝试以下代码,希望它对您有用。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM