我正在尝试使用phpMyAdmin制作自定义搜索引擎,并且一直在搜索数小时尝试找到修复我的查询返回false。我是php和sql的新手,所以如果有人能向我解释我做错了什么,那就太棒了!
<html>
<head>
<title>Results</title>
<h1>Search Results</h1>
</head>
</html>
<?php
$search = $_GET['query'];
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("unblocked_search");
$query = mysql_query("SELECT * FROM unblocked_search WHERE title LIKE '%".$search."%'");
if(mysql_num_rows($query) >= 1) {
while($a = mysql_fetch_array($query)) {
echo "<a href='".$a['link']."'>".$a['title']."</a><p>".$a['description']."</p><hr/>";
}
} else {
echo "Oh no! Nothing was found.";
}
?>
答案 0 :(得分:0)
PHP mysql_query
函数需要两个参数。第一个参数是查询字符串。第二个参数是连接。
参考:http://php.net/manual/en/function.mysql-query.php
正如@Barmar在下面的评论中指出的那样,
mysql_query
的第二个参数是可选的。因此,上述答案可能与观察到的行为无关。
就调试问题而言,我建议您先切换到使用mysqli_或PDO。然后添加代码以检查函数调用的返回值;测试与数据库的连接是否成功。测试查询的执行是否成功。
启用PHP错误报告。如果发生错误,您想了解它。不要让你的代码把它的小拇指放在它的嘴角和Dr.Evil风格
斯科特邪恶:等等,你甚至不去看他们吗?他们可以逃脱!博士。邪恶:不,不,我会让他们独自离开,而不是亲眼目睹他们死亡,我只是假设一切都按计划进行。什么?
注意:
如文档中所示,mysql_接口函数已弃用(并在PHP 7中删除。)新开发应使用mysqli_或PDO。 mysqli_函数与大多数已弃用的mysql_函数相对应,尽管存在一些差异。请注意,mysqli_query的参数顺序不同。
这是mysqli_query函数的文档:
http://php.net/manual/en/mysqli.query.php
此外,最佳做法是将预备语句与绑定占位符一起使用。如果我们绝对需要在SQL文本中包含可能不安全的值,那么当我们这样做时,值必须被正确转义。有专门为此设计的功能:
参考:http://php.net/manual/en/mysqli.real-escape-string.php
(注意:这是对mysqli_函数的引用。不混合mysql_和mysqli_接口函数;使用其中一个。(实际上,不要使用mysql_根本就是使用mysqli _。)
如果我们通过预先准备好的语句中的绑定占位符提供值,则不需要对其进行转义。
$search = $_GET['query'];
if(!$dbh = mysqli_connect('localhost', 'user', 'password', 'database') {
// connect failed
die( mysqli_connect error() );
}
// static SQL text, not vulnerable to SQL Injection
$sql = "SELECT * FROM unblocked_search WHERE title LIKE CONCAT('%', ? , '%')";
if(!$sth = mysqli_prepare($dbh, $sql)) {
// prepare failed
die( mysqi_error($dbh) );
} else {
mysqli_stmt_bind_param($sth,'s',$search);
if( mysqli_stmt_execute($sth) ) {
$result = mysqli_stmt_get_result($sth);
while( $row = mysqli_fetch_array($result, MYSQLI_ASSOC) ) {
echo "\n<br> $row['name'] <br> $row['description'] ";
}
} else {
// execute failed
die( mysqli_error($dbh) );
}
}
注意:我们使用die
作为占位符,代替更合适的错误处理(记录信息,向用户返回错误页面等等。