2011-01-09 130 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']);