我有一个MySQL表,如下所示:
index | tag | posts
-------------------------
1 | cats | 9,10
2 | a cat | 9,10
3 | kitty | 9,10
4 | meow | 9,10
我正在尝试返回与搜索查询匹配的行。
我使用简单的?search=cats
传递了搜索参数。
这是我正在使用的PHP:
$search = $_GET['search'];
$query = mysql_query("SELECT * FROM tags WHERE tag = '$search'");
echo(mysql_num_rows($query));
$result = mysql_fetch_array($query);
$print = $result['posts'];
echo($print);
但是mysql_num_rows($query)
打印0并且$print
返回NULL。我可以使用($print == "")
进行检查,评估为TRUE,mysql_num_rows($query)
返回4。
我尝试将搜索查询设置为不在表中的内容,并按预期重新调整为FALSE。我也尝试删除WHERE tag = '$search'
并返回表格。
我有什么东西可以忽略吗?
修改
接受大家的建议,我现在使用的代码是:
$search = mysql_real_escape_string($_GET['search']);
var_dump($search); //prints string(4) "cats" just like it should
$queryText = "SELECT * FROM tags WHERE tag = '%".$search."%'";
echo($queryText); //SELECT * FROM tags WHERE tag = '%cats%'
$query = mysql_query($queryText) or die(mysql_error()); //no error
$rows = mysql_num_rows($query); //this returns 0 and I know it should match 1 row
echo('rows: '.$rows);
$result = mysql_fetch_array($query);
$print = $result['posts'];
echo($print); //empty
还有同样的问题。 mysql_query
重新调整NULL而不是行,如果不匹配,则返回FALSE。
(将来我将使用mysqli
API,但我想在mysql
中修复此项目。感谢您的建议和建议
答案 0 :(得分:1)
立即试用此代码。
记住当您想在PHP中调试某些内容时,更快的方法是 var_dump 而不是 echo 。你也应该避免使用mysql_api,因为它们已被弃用,而是使用PDO而不是PDO on PHP.net
var_dump($_GET); // Just for debuggin if as something
$search = $_GET['search'];
$query = mysql_query("SELECT * FROM tags WHERE tag = '".mysql_real_escape_string($search)."'");
// echo(mysql_num_rows($query));
$result = mysql_fetch_array($query);
var_dump($result);
//$print = $result['posts'];
//echo($print);
答案 1 :(得分:0)
$search = $_GET['search'];
echo $select_query="SELECT * FROM tags WHERE tag = '".mysql_real_escape_string($search)."'";
$query = mysql_query($select_query);
echo(mysql_num_rows($query));
while($result = mysql_fetch_array($query))
{
print_r($result);
}
答案 2 :(得分:0)
注意:
$search = $_GET['search'];
$query = mysql_query("SELECT * FROM tags WHERE tag = '$search'");
这是非常危险的:它允许sql incersion代码到你的数据库。你必须始终逃避从客户那里得到的所有东西。
$search = mysql_real_escape_string($_GET['search']); //It require open database connection.
注2: mysql_query已过时,请改用mysqli; - )
答案:
如果您没有回答,则可能在其他部分出错。 尝试
//1) Look if your search has a correct value
var_dump($search);
//2) Replace the query with (just for debugging):
$query = mysql_query("SELECT * FROM tags WHERE tag = 'cats';");
如果您想要更灵活的搜索,也可以使用“%like'%tag'”。
答案 3 :(得分:0)
好的,在参考上面的编辑后,这是解决方案
使用通配符“%”
时,请使用“LIKE”而不是“=”所以你现在的查询应该是
$queryText = "SELECT * FROM tags WHERE tag LIKE '%" . $search . "%'";
[我在我的本地系统上创建了完全相同的数据库并运行了相同的代码,完成上述更改后,按预期运行]
答案 4 :(得分:0)
如果你删除了WHERE tage ='$ search',它就不能像它那样返回表格,因为你的mysql_fetch_array不在while循环中......但是除此之外......
// make sure before you execute the code to check that $_GET['search'] is not empty
// start with escaping the search-value (for mysql-injection)
$search = msyql_real_escape_string($_GET['search']);
// changed the query so it searches for tags containing the search value.
// if you would have records with tags "blue cat" and "red cat" it shows them both
// when searching for "cat"
$query = mysql_query("SELECT * FROM tags WHERE tag LIKE '%".$search."%'");
// put the number of rows in a var
$num = mysql_num_rows($query);
// check this var if it's not 0
if ($num != '0'){
while ($row = mysql_fetch_array($query){
echo $row['posts'];
// etc...
}
} else {
// 0 rows found
echo "nothing found";
}