这就是我要在网站上制作搜索选项的方法。
当我将WHERE name = '%$name%"
添加到sql时,它不能以某种方式工作。但是如果我把它拿走并且只有SELECT name, link, img, area FROM test dyslexic
,那么内容会出现在页面上。
t将不会显示数据库实例的内容
if($stmt = $this->mysqli->prepare('SELECT `navn`, `link`, `img`, `omrade` FROM `ordblindtest` WHERE `navn` = "%$navn%"'))
{
$stmt->bind_param('s', $navn);
$navn = $_POST["sogord"];
如果我这样写的话,那么页面上就没有任何问题。
if($stmt = $this->mysqli->prepare('SELECT `navn`, `link`, `img`, `omrade` FROM `ordblindtest`'));
问题是当我在数据库中搜索某些内容时,第一个sql中的内容是如何在页面上显示的。
答案 0 :(得分:0)
通常当您使用您正在使用的语句时,您可以像这样使用它:
WHERE name LIKE %".$name."%"
注意我没有使用“=”符号。我希望这会有所帮助。
答案 1 :(得分:0)
要将%
用作通配符,您需要使用LIKE
而不是=
。另外,因为您正在使用预准备语句,所以您应该使用?
占位符而不是变量。
if ($stmt = $this->mysqli->prepare('
SELECT
`navn`,
`link`,
`img`,
`omrade`
FROM
`ordblindtest`
WHERE
`navn` LIKE CONCAT("%", ?, "%")
OR
`omrade` LIKE CONCAT("%", ?, "%")
'))
{
$stmt->bind_param('ss', $navn, $omrade);
// ...
答案 2 :(得分:-1)
使用单引号时,变量不会被解析,因此您的查询将逐字搜索字符串$navn
。
'SELECT `navn`, `link`, `img`, `omrade` FROM `ordblindtest` WHERE `navn` = "' . $navn . '"'
虽然你真的应该使用占位符而不是直接在查询中注入你的变量:
'SELECT `navn`, `link`, `img`, `omrade` FROM `ordblindtest` WHERE `navn` = ?'
使用%
时会使用LIKE
,而不是在比较时使用。{/ p>