2014-03-12 79 views
0

我是一个初学者,并尝试拥有一个非常简单的消息系统。 每一件事情是通过用户ID的管理..MySql未知列在哪里

因此,如果有人类型的人的用户名我必须把它转换成个人的ID:

$res_name = $_POST["res_name"]; 
    $res_id = userToId($res_name); 

这个功能看起来是这样的:

function userToId($username) { 
    $data = array(); 
    $func_get_args = func_get_args(); 

    if($func_num_args = 1) 
    { 
    $res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = `$username`") or die(mysql_error()); 
    $data = mysql_fetch_assoc($res); 
    } 
    return $data['id']; 
} 

这是行不通的,其实它无法找到,即使它现有的用户名..

误差,例如:

未知列在“where子句”

用户存在,希望你能帮助我:) PS“testperson”:我知道我不应该使用mysql_ *但还没学会更好的版本..;)

回答

0

当周围使用反引号您可变那么它将被视作列

这就是为什么你得到了错误Unknown column 'testperson' in 'where clause'

哟ü应该使用这个(你应该逃脱你的变量,以防止SQL注入)

$username = mysql_real_escape_string($username); 
$res = mysql_query("SELECT id FROM `z_network_users` 
     WHERE `username` = '$username' ") or die(mysql_error()); 

或本

$username = mysql_real_escape_string($username); 
$res = mysql_query("SELECT id FROM `z_network_users` 
     WHERE `username` = '".$username."' ") or die(mysql_error()); 

尝试功能:

function userToId($username) { 

    $func_get_args = func_get_args(); 
    $username = mysql_real_escape_string($username); 
    if($func_num_args == 1) 
{ 
    $res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = '$username' ") or die(mysql_error()); 
    $row = mysql_fetch_assoc($res); 

} 
    return $row['id']; 
} 
+0

非常感谢你:) – fredkid

+0

你欢迎:),你的功能现在应该因为它必须工作 –

+1

它!这就是为什么我爱堆栈溢出:) – fredkid

1

你不应该使用around your值我想。

+0

是的,真的。你应该逃避价值。 SQL注入等。 – Rudie

+0

是的,你不应该使用。 –

+0

这个答案没有任何意义。反引号是一个特殊的标记字符。 – deceze

0
"SELECT id FROM `z_network_users` WHERE `username` = '$username'" 

这将修复您的查询但是mysql_ *函数已被弃用,所以您应该避免使用它们。改用mysqli或PDO。

+0

谢谢!我知道:)我将使用DPO代替 – fredkid

0

你不应该backticking条目

$res = mysql_query("SELECT id FROM `z_network_users` WHERE `username` = '$username'") or die(mysql_error()); 
+0

谢谢:)得到它 – fredkid

0

你没有任何列,但

WHERE `username` = `$username`" 

$username理解为列,以便从$用户名删除``,把单引号把它像“$用户名”

+0

得到它谢谢:) – fredkid

+0

然后请接受你的答案,从任何你喜欢 –

0

我觉得您的查询返回多于1 。您需要使用mysql_num_rows()才能获得一条记录。这就是为什么它不起作用。

+0

不,只有一个值,但我明白了:)感谢您的回答! – fredkid

+0

你如何解决它? –

+1

'$ username = mysql_real_escape_string($ username); $ res = mysql_query(“SELECT id FROM'z_network_users' WHERE'username' ='”。$ username。“'”)or die(mysql_error());'这工作:)感谢@echo_me – fredkid