查询输出php代码

查询输出php代码,php,mysql,sql,Php,Mysql,Sql,我正在阅读一本关于PhP和MySQL的书,但以下代码无法正常工作: <html> <head> <title>Book-O-Rama Search Results</title> </head> <body> <h1>Book-O-Rama Search Results</h1> <?php //short variables $searchtype = $_POST['

我正在阅读一本关于PhP和MySQL的书,但以下代码无法正常工作:

<html>
    <head>
    <title>Book-O-Rama Search Results</title>
    </head>
<body>
<h1>Book-O-Rama Search Results</h1>
<?php
//short variables
$searchtype = $_POST['searchtype'];
$searchterm = trim($_POST['searchterm']);

echo $searchterm;

if(!$searchtype || !$searchterm) {
    echo 'You have not entered search details.';
    exit;
}

if(!get_magic_quotes_gpc()) {
    $searchtype = addslashes($searchtype);
    $searchterm = addslashes($searchterm);
}

@ $db = new mysqli('localhost', 'root', '', 'books');

if(mysqli_connect_errno()) {
    echo 'Error: could not connect to the database. Please try again later.';
    exit;
} else {
    echo "All right";
}

$query = "select * from books where ".$searchtype." like '%".$searchterm."%";
$result = $db->query($query);

$num_results = $result->num_rows;

echo "<p>Number of books found: ".$num_results."</p>";

for($i=0; $i < $num_results; $i++) {
    $row = $result->fetch_assoc();
    echo "<p><strong>".($i+1).". Title: ";
    echo htmlspecialchars(stripslashes($row['title']));
    echo"</strong><br />Author: ";
    echo stripslashes($row['author']);
    echo "<br /> ISBN: ";
    echo stripslashes($row['isbn']);
    echo "<br />Price: ";
    echo stripslashes($row['price']);
    echo "</p>";
}

$result->free();
$db->close();


?>
</body></html>

Book-O-Rama搜索结果
Book-O-Rama搜索结果

您的问题在于SQL查询。我可以补充说,这让我几乎流下了眼泪

" like '%".$searchterm."%"
您有一个单引号在第一个%处打开,而在后面的%处关闭。这将把代码的其余部分转换为字符串

除此之外,我真的建议你阅读。您的代码非常容易受到攻击,尤其是将经过清理的变量直接放到查询中。您应该为SQL查询中使用的任何变量使用。对于输出,您应该运行它们(可能还有strip_标记)


我建议您选择一本关于PHP/MYSQL的最新书籍。您的代码让我想起了我在2003年购买的一款Sams 24小时自学PHP——没有考虑安全性,只考虑功能。

不幸的是,这里有很多cargo cult编程。测试魔引号和任意使用
stripslashes
并不是真正必要的。使用
addslashes
是不正确的方法。使用
mysqli
时,您应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串插值来完成此操作,因为您会创建严重的错误。您是否尝试过用单个回号替换
标记,即
echo”找到的图书数量:“..$num_结果”。

变为
echo''找到的书籍数:'$数值结果。”

",
@tadman我刚刚接触PhP,所以我只是在学习这本书。这段代码在书中展示是为了教初学者如何使用PhP数据库。关于SQL注入的话题将在后面讨论。这本书已经过时,有害无益。手工编写查询时,注入关注点是最重要的。即使是一个未经检查的错误也会破坏你的网站。我强烈建议您学习一种更现代的方法,选择一种适合您需要的友好方式,并使用它提供的接口,而不是从头开始繁琐地编写所有内容。插入数据库时无需删除HTML
htmlspecialchars
用于显示数据库内容,而不是插入。公平点;更新。本打算把帖子分开,但却被转移到了一边,弄糊涂了。
" like '%".$searchterm."%"