【发布时间】:2019-04-24 01:47:58
【问题描述】:
谁能告诉我为什么这个 SQL 命令不起作用? 我有一个包含多个输入的表单,即 (id)=> 帐号,然后是名字、姓氏和电子邮件。我想允许用户随意搜索。
如果我以“与 AND”的方式保留代码 .. 仅搜索 (id) 时,它只会显示 ID 行,但如果我尝试,它不会显示其余搜索输入第一个,最后一个或电子邮件,但如果我将其更改为“或”,那么所有其他输入框都将显示单个结果,但如果我只输入 id“帐号”,我将在我的表格中显示每个客户.. 为什么? 我错过了什么,所以我的代码可以搜索所有输入? 谢谢
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$firstname = "%$firstname%";
$lastname = "%$lastname%";
$email = "%$email%";
$id = $_POST['id'];
$stmt = $conn->prepare("
SELECT * FROM `Demo_Guests`
WHERE
firstname LIKE :firstname
AND lastname LIKE :lastname
AND email LIKE :email AND id = :id
");
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->bindValue(':firstname', $firstname,PDO::PARAM_STR);
$stmt->bindValue(':lastname', $lastname,PDO::PARAM_STR);
$stmt->bindValue(':email', $email,PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach($result as $row){
echo "<tr><td>
<a href=\"main_table.php?id={$row->id}\"> " . $row->id . "</a><br></td>";
echo "<td>" . $row->firstname . "</td>";
echo "<td>" . $row->lastname . "</td>";
echo "<td>" . $row->email . "</td>";
echo "<td>" . $row->reg_date . "</td></tr>";
}
【问题讨论】:
-
当你使用 OR 语句时,你需要确保你没有
firstname LIKE '%%',因为它会匹配所有的东西。您需要构建查询以仅使用表单提供的非空值。 -
@Jerry 你在那里写的一段相当不错的代码。我刚看到。今晚我会尝试一下,看看我是否能完成我想要的……绝对是一种不同的方法,但我可以看到它是如何完全起作用的。现在我只是在学习基础知识.. 我今晚会再发一张纸条,告诉你我是否能成功!谢谢
-
@Jerry 一个简单的问题.. 为什么当我使用 AND 时,一切正常,但是当我将 id 添加到整个 sql 命令时,它会禁用它,它只适用于 id?
-
当您使用 AND 时,您只会得到符合所有条件的结果。因此,当您与 id 进行 AND 时,可能只有一条记录可以匹配。
-
@Jerry 很好。我将处理你今晚帮助我编写的代码,看看我是怎么做的。谢谢..如果有任何进一步的帮助,我可以更新你吗?可以吗?