2011-01-09 203 views
-2

好吧,我一定是个白痴,因为这是我今天的第三个问题。 这里是我的代码:MySQL查询出错

date_default_timezone_set("America/Los_Angeles"); 

include("mainmenu.php"); 

$con = mysql_connect("localhost", "root", "********"); 
if(!$con){ 
    die(mysql_error()); 
} 

$usrname = $_POST['usrname']; 
$fname = $_POST['fname']; 
$lname = $_POST['lname']; 
$password = $_POST['password']; 
$email = $_POST['email']; 

mysql_select_db("`users`, $con) or die(mysql_error()"); 

$query = ("INSERT INTO `users`.`data` (`id`, `usrname`, `fname`, `lname`, `email`, `password`) 
VALUES (NULL, '$usrname', '$fname', '$lname', '$email', 'password'))"); 

mysql_query('$query') or die(mysql_error()); 

mysql_close($con); 

echo("Thank you for registering!"); 

我总是得到错误返回:“你在你的SQL语法错误;检查对应于你的MySQL服务器版本使用附近的“$查询正确的语法手册'在1号线 帮助一个新手,我要刺我的显示器

+0

从的mysql_query删除引号(“$查询”) – 2011-01-09 02:41:42

+2

不是一个非常有用的标题 – kenwarner 2011-01-09 02:42:43

回答

4

1)在这一行:

mysql_select_db("`users`, $con) or die(mysql_error()"); 

应该是:

mysql_select_db("users", $con) or die(mysql_error()); 

现在你有你发送数据库名称的字符串内的PHP代码。

2)在此行中:

mysql_query('$query'); 

通过使用单引号,文字串$query将被发送,而不是称为$query变量的内容。二者必选其一mysql_query($query)mysql_query("$query");

而且,当你创建$query,并在那里你echo成功的消息,该字符串周围的括号是不必要的。

WITHIN $query,你有太多的结束括号。您也无法逃避任何输入,因此如果有人在您的表单中写入了一些令人讨厌的内容(如带有单引号字符的任何内容),则会破坏您的查询。

1

的mysql_query(' $查询')=>的mysql_query( “$查询”)

2
mysql_query($query) or die(mysql_error()); 

您的$查询变量周围没有引号。

单引号(')不允许你嵌入变量,而双引号(“)做的。

1

如何修复SQL注入孔

改变此密码

enter image description here编码恐怖

$usrname = $_POST['usrname']; 
$fname = $_POST['fname']; 
$lname = $_POST['lname']; 
$password = $_POST['password']; 
$email = $_POST['email']; 

我n要这个

$usrname = mysql_real_escape_string($_POST['usrname']); 
$fname = mysql_real_escape_string($_POST['fname']); 
$lname = mysql_real_escape_string($_POST['lname']); 
$password = mysql_real_escape_string($_POST['password']); 
$email = mysql_real_escape_string($_POST['email']);