我在堆栈上搜索这个问题并没有发现任何内容。这可能是一个语法问题,但我不明白。
//Include necessary files
include_once("inc/mysql.inc.php");
include_once("inc/security.inc.php");
//SECURITY: Check input before adding them into the table.
$u = security_checkinput($u);
//Connect to the MySQL database.
mysql_dbconnection();
//Go get users id corresponding to the search
$u = mysql_query("SELECT id FROM users
WHERE name LIKE \"%$u%\" OR active LIKE \"%$u%\"
ORDER BY name ASC") or die("There is a server error : " . mysql_error());
$u = mysql_fetch_row($u);
//Close database connection
mysql_dbclose();
//Return the array.
return $u;
我在查询后在$ u上尝试了一个mysql_num_rows,它返回给我0.不幸的是,在users表和名称列中有一些东西。
有任何帮助吗? 非常感谢!!
编辑:问题来自security_check函数。我想尽可能避免sql注入,所以我做了这个:
function security_checkinput ($s)
{
$s = stripslashes($s);
if (!is_numeric($s))
$s = "'".addslashes($s)."'";
return $s;
}
答案 0 :(得分:2)
第1点:您正在为$ u分配查询并在LIKE语句中使用相同的变量。
第2点: 您错误地编写了 LIKE 语句。它应该是
$query = mysql_query("SELECT id FROM users
WHERE name LIKE '%$u%' OR active LIKE '%$u%'
ORDER BY name ASC") or die("There is a server error : " . mysql_error());
$query = mysql_query("SELECT id FROM users
WHERE CONCAT(name, ' ,' , active) LIKE '%$u%'
ORDER BY name ASC") or die("There is a server error : " . mysql_error());
我更喜欢CONCAT,因为如果有很多变量,你不需要编写n个OR语句。
答案 1 :(得分:0)
您是否首先回显了您的查询并尝试直接在数据库中运行它?
无论如何,正确使用LIKE子句..
$u = mysql_query("SELECT id FROM users
WHERE name LIKE '%$u%' OR active LIKE '%$u%'
ORDER BY name ASC") or die("There is a server error : " . mysql_error());
你不需要在这里使用'/',phpvariable将在这里自行处理。试试这个
答案 2 :(得分:0)
我不完全确定这是否是导致问题的唯一原因,但是这个
WHERE name LIKE \"%$u%\" OR active LIKE \"%$u%\"
应该是
WHERE name LIKE '%$u%' OR active LIKE '%$u%'
您是否尝试直接针对您的数据库运行此查询?那里有什么回报?
答案 3 :(得分:0)
什么是你?您的查询很好,看起来您没有任何匹配的行。
答案 4 :(得分:0)
您的安全功能看起来就像是问题所在。 例如,每当$ u是单词test时,它将返回'test' 已经存在于您的SQL语句中。
将其从安全功能中删除,你会没事的。 我建议不要更改条带斜线并添加斜线更合理的东西,比如mysql_real_escape_string
修复示例,基于旧代码:
function security_checkinput ($s)
{
$s = stripslashes($s);
if (!is_numeric($s))
$s = addslashes($s);
return $s;
}
mysql_real_escape_string用法的例子(你应该真的使用这个):
function security_checkinput ($s){
$s = mysql_real_escape_string($s);
return $s;
}
确保你也申请了Nishu Tayal的解决方案。斜杠不属于那里。