我正在搜索我的网站,搜索字词存储在数据库中。
这是我的代码
<?php
$search = $_GET["q"];
if ($search <= "") {
}
else {
$con = mysql_connect("localhost", "cl49-XXX", "XXX");
if (!$con) {
die('Could not connect: line 513 ' . mysql_error());
}
mysql_select_db("cl49-XXX", $con) or die("Unable to select database");
$result = mysql_query("SELECT * FROM registrations WHERE 'rname' LIKE '%$search%'") or die('Error: Line 519 (' . mysql_error() . ')');
$num_rows = mysql_num_rows($result);
if ($num_rows=="0"){
echo"<h4> No Results Found for <b>$search</b>. Please try a different search</h3>";
}
else {
echo "<h3>$num_rows results found for <b> $search</b></h3><br /><br />";
}
如果我搜索名称“donna”(此名称在数据库中),我会收到错误
'where子句'中的未知列'donna'
答案 0 :(得分:4)
正如所有社区所说:请不要使用 mysql _ 函数,请尝试使用mysqli或PDO。
建议:逃避输入,防止注射等。
执行:$search = mysql_real_escape_string( $_GET["q"] );
并更改此行
$result = mysql_query("SELECT * FROM registrations WHERE `rname` LIKE '%". $search ."%'") or die('Error: Line 519 (' . mysql_error() . ')');
编辑(脚本改进)。
mysql_num_rows返回一个整数值,那么,为什么要将它与字符串进行比较?
$num_rows = mysql_num_rows($result);
if (!$num_rows){
或if ($num_rows == 0)
...
答案 1 :(得分:1)
更改
mysql_query("SELECT * FROM registrations WHERE 'rname' LIKE '%$search%'")
到
mysql_query("SELECT * FROM `registrations` WHERE `rname` LIKE '%".$search."%'")
答案 2 :(得分:0)
假设您的表中的列名是rname
:
WHERE 'rname' LIKE
应该是
WHERE rname LIKE
答案 3 :(得分:0)
`和'之间存在差异。您已在此帖子中使用了列名称rname和'%$ search%'。我猜你实际上在你的代码中使用了'%$ search%`。
更改您的代码如下。
$result = mysql_query("SELECT * FROM registrations WHERE `rname` LIKE '%$search%'") or die('Error: Line 519 (' . mysql_error() . ')');