简易搜索引擎无法输出数据库内容问题求助
解决你的搜索引擎无输出问题
我帮你排查出几个关键问题,都是代码里的低级错误,改完应该就能正常输出了:
核心问题:用错了数据库连接对象
你创建的数据库连接变量是$connect,但后面操作数据库时全程用的是$test——这个变量根本没定义过啊!比如$test->escape_string($_GET['name'])、$test->query(...),这相当于完全没调用正确的数据库连接,肯定查不到任何数据。把所有$test替换成$connect就解决了最根本的问题。重复创建数据库连接
你先写了mysqli_connect("localhost", "root", '', "test");,接着又用new mysqli(...)新建了一个连接,这完全多余,留一个就行。建议保留面向对象的写法,还得加上连接错误检查,不然连不上数据库你都不知道:$connect = new mysqli("localhost", "root", "", "test"); $connect->set_charset("utf8"); // 检查连接是否成功 if ($connect->connect_error) { die("数据库连接失败: " . $connect->connect_error); }SQL语句的LIKE语法写错了
你写的LIKE '%[$name]%'是在匹配包含[$name]字面内容的记录,而不是匹配包含用户输入关键词的记录,把方括号去掉,改成%{$name}%才对:$query = $connect->query("SELECT name, price FROM tbl_product WHERE name LIKE '%{$name}%' OR price LIKE '%{$name}%'");加上查询错误检查
现在代码里没判断查询是否执行失败,万一SQL写错了也没法排查,建议加上:if (!$query) { die("查询执行失败: " . $connect->error); }额外提醒:用预处理语句防SQL注入
直接把用户输入拼进SQL里有安全风险,推荐用mysqli的预处理语句,既安全又能避免语法问题:if(isset($_GET['name'])) { $keyword = "%".$_GET['name']."%"; $stmt = $connect->prepare("SELECT name, price FROM tbl_product WHERE name LIKE ? OR price LIKE ?"); $stmt->bind_param("ss", $keyword, $keyword); $stmt->execute(); $result = $stmt->get_result(); ?> <div class="result-count"> Fandt <?php echo $result->num_rows; ?> resultater. </div> <?php if($result->num_rows) { while ($r = $result->fetch_object()) { ?> <div class="result"> <a href="#"><?php echo $r->name; ?></a> </div> <?php } } }
最后再确认下你的数据库表名确实是tbl_product,字段name和price和结构一致,这些没问题的话,改完代码应该就能正常输出搜索结果了。
内容的提问来源于stack exchange,提问作者Emil Malling
相关产品推荐
相关产品推荐

