我有一个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
中完成这个项目。感谢您的建议和意见。)
mysql_*
函数。它们已不再维护,并已正式弃用。看到红框了吗?学习prepared statements,并使用PDO或MySQLi - 本文将帮助您决定选择哪个。如果您选择PDO,这里有一个好的教程。 - Touki$queryText = "SELECT * FROM tags WHERE tag = '$search'"; print($queryText);
还可以尝试将or die(mysql_error);
放在与mysql_query()
相同的行上。 - EM-Creationsmysql_real_escape_string()
。 - ryder$_GET['search']
,它确实是我想要的。我还添加了or die(mysql_error())
,但没有返回任何错误。感谢你的帮助。 - thunder618