我很难过为什么我的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>   $id
</li><li class=list-group-item> <strong>Email:</strong>   $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; ?>
答案 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."%'";