我已经设置了一个搜索框,您可以输入您希望获取其信息的产品ID。当我在产品ID框中输入数据时,没有返回任何结果,任何人都知道我做错了什么?我认为'while($ row = mysql_fetch_array($ result)){'错了,但不太确定,因为我尝试的一切都没有用。
<div class="searchbox">
<form action="Search.php" method="get">
<fieldset>
<input name="search" id="search" placeholder="Search for a Product" type="text" />
<input id="submit" type="button" />
</fieldset>
</form>
</div>
<div id="content">
<ul>
<?php
// connect to the database
include('base.php');
$search = mysql_real_escape_string($_GET['search']);
$query = "SELECT * FROM Product WHERE ProductID LIKE '%{$search}%'";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
echo "<li><span class='name'><b>{$row['ProductID']}</b></span></li>";
}
答案 0 :(得分:0)
在$ search之前和之后删除{}。
应该是:
$query = "SELECT * FROM Product WHERE ProductID LIKE '%$search%'";
答案 1 :(得分:0)
您可以使用:
$result = mysql_query($query) or die($query."<br/><br/>".mysql_error());
确认数据正在返回。
答案 2 :(得分:0)
不要使用特定于mysql的语法,它已经过时,可能会让您在以后遇到麻烦,特别是如果您决定使用sqlite或postgresql。
使用PDO连接,你可以这样初始化:
// Usage: $db = connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword);
// Pre: $dbHost is the database hostname,
// $dbName is the name of the database itself,
// $dbUsername is the username to access the database,
// $dbPassword is the password for the user of the database.
// Post: $db is an PDO connection to the database, based on the input parameters.
function connectToDatabase($dbHost, $dbName, $dbUsername, $dbPassword)
{
try
{
return new PDO("mysql:host=$dbHost;dbname=$dbName;charset=UTF-8", $dbUsername, $dbPassword);
}
catch(PDOException $PDOexception)
{
exit("<p>An error ocurred: Can't connect to database. </p><p>More preciesly: ". $PDOexception->getMessage(). "</p>");
}
}
然后初始化变量:
$host = 'localhost';
$user = 'root';
$dataBaseName = 'databaseName';
$pass = '';
现在您可以通过
访问您的数据库了$db = connectToDatabase($host , $databaseName, $user, $pass); // You can make it be a global variable if you want to access it from somewhere else.
然后你应该确保你确实有变量:
$search = isset($_GET['search']) ? $_GET['search'] : false;
因此,如果某种东西以某种方式失败,你实际上可以跳过数据库的事情。
if(!$search)
{
//.. return some warning error.
}
else
{
// Do what follows.
}
现在您应该构造一个可以用作准备好的查询的查询,也就是说,它接受预准备语句,以便您准备查询,然后执行要在查询中执行的变量数组,以及在此期间将避免使用sql注入:
$query = "SELECT * FROM Product WHERE ProductID LIKE :search;"; // Construct the query, making it accept a prepared variable search.
$statement = $db->prepare($query); // Prepare the query.
$statement->execute(array(':search' => $search)); // Here you insert the variable, by executing it 'into' the prepared query.
$statement->setFetchMode(PDO::FETCH_ASSOC); // Set the fetch mode.
while ($row = $statement->fetch())
{
$productId = $row['ProductID'];
echo "<li class='name><strong>$productId</strong></li>";
}
哦,是的,不要使用b标签,它已经过时了。使用strong代替(在单独的css文件中应用font-weight:bold;到.name更聪明。
如果有任何不清楚的地方,请随时提问。