我一直在尝试建立一个网站来销售书籍,其中我有一个包含书籍及其作者的 mysql 数据库。 我希望在主页上添加一个搜索栏(其中使用基本的 PHP 和 mysql 打印所有书籍的列表)。
我仍然不确定如何去做,所以这就是我打算做的:
- 连接到数据库
- 使用 POST 方法进行搜索查询并对 search.php 执行操作,例如,假设条目是“社会变革”
- 在search.php中,使用explode()将查询语句分解为单词/关键字并创建一个数组。因此查询变成一个包含 [0] => 'social' 和 [1] => 'change' 的数组
- 在我现有的数据库中,假设我有一本名为“社会变革动态”的书的条目。我在数据库中创建了另一列,其中包含与该书相对应的(动态、社会、变化)数组。 (((如何使用mysql做到这一点?))))
- 使用 SQL 查询从书名数组包含我的关键字数组的任何元素的位置选择条目。
- 如果找到任何结果,请打印。
这是我所做的: 来自index.php
<form action= 'search.php' method='post'>
<input type='text' name='q'>
<input type='submit'>
</form>
来自 search.php,连接到数据库后:
$q = $_POST["q"];
$keys = explode(" ", $q);
$x = 0;
echo "<table>";
while ($x < sizeof($keys))
{
$req = "SELECT * FROM book WHERE name= '$keys[$x]'";
$run = mysqli_query($connect,$req)
or die('Query req failed: ' . mysql_error());
while
($line = mysqli_fetch_array($run, MYSQL_ASSOC))
{
echo "<tr>";
echo "<td>" . $line['name'] . "</td>";
echo "</tr>";
}
$x = $x + 1;
}
echo "</table>";
我面临的问题是我没有得到任何输出。 我尝试了不同的输入,但无法找出错误。
我想问的是: 1. 我这样做的逻辑正确吗?考虑到我是 PHP 和 mysql 的新手,这种搜索方式在逻辑上是否正确?如果没有,您能为这个简单的网络项目建议任何简单/基本的方法吗?
如果我打算做的事情是正确的,你能帮我找出我哪里出错了吗?
我还没有找到第 4 步中的 HOW 部分,即在 mysql 数据库中创建另一列,该列由一个数组组成,该数组的元素基本上是从书名中分割出来的单词。 例如,A 栏:“社会变革的动态” B 栏:(动态、社会、变化)
最佳答案
您需要使用like ,而不是 =
。 =
需要匹配。 like
用于表示like
值。例如,如果数据库包含 firetruck
并且您这样做了
select * from table where column = 'fire'
你不会得到任何结果。但是如果你这样做了
select * from table where column like '%fire%'
您将获得消防车
行。
%
s 允许该侧的任何内容,例如:
select * from table where column like '%fire'
找不到 firetruck
,因为它只会找到以 fire
结尾的记录。
不过,您可能想了解全文搜索。 http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html
您也不应该将用户输入直接传递到 SQL 查询中。使用准备好的语句。
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29
How can I prevent SQL injection in PHP?
关于php - 如何使用PHP和mysql制作搜索页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34244928/