sql主键不起作用?

时间:2014-02-19 00:14:30

标签: php sql key

我正在为我的网站制作一个注册脚本,我注意到,当我注册时,我可以一遍又一遍地重新提交表单,我不知道为什么没有什么能阻止我。我的意思是,这是用于查看用户是否已经存在的PHP脚本:

function user_exists($username) {
$query = mysql_query("SELECT username FROM users WHERE username='$username'");
if (mysql_num_rows($query) != 0){
  return true;
 }
else{
return false;
}
}

并且是我用来创建表的SQL代码:

CREATE TABLE IF NOT EXISTS `users` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`password` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(1024) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`active` int(11) NOT NULL DEFAULT '0',
`ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '0.0.0.0',
`date` varchar(64) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=61 ;

所以,如果有人能帮助我,那么任何帮助都会得到满足。

2 个答案:

答案 0 :(得分:0)

这与回答你的问题毫无关系,但与提高你快速写出高效率的能力有关。编写良好的代码:

你的方式:

function user_exists($username) {
$query = mysql_query("SELECT username FROM users WHERE username='$username'");
if (mysql_num_rows($query) != 0){
  return true;
 }
else{
return false;
}
}

更好的书面方式:

function user_exists($username) {
  $query = mysql_query("SELECT username FROM users WHERE username='$username'");
  if(mysql_num_rows($query) > 0) return true;
  return false;
}

sql语句似乎没问题,只要你正在调用你的函数并正确测试它就应该有效。虽然除非你在调用user_exists之前清理你的$ username输入,否则你的安全漏洞就会大不相同;)

答案 1 :(得分:0)

我在您的代码段中看到了一些问题。

1)你调用user_exists()函数的方式,每次调用它时都会传递“true”作为用户名。你有......

if (user_exists($_POST['username'] == true)) { 
    $errors[] = "Username already registered."; 
}

所以你正在运行的实际查询是......

SELECT username FROM users WHERE username='1';

应该......

if (user_exists($_POST['username'])) { 
    $errors[] = "Username already registered."; 
}

2)调用mysql_query()时缺少参数。连接应该有第二个参数。

$query = mysql_query($"SELECT userName FROM csg.user WHERE userName='$username'",$con);