[英]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>   $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; ?>
根据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.