2012-07-10 36 views
1

好吧,所以我寫了一個register.php腳本,當命令嘗試執行時,我得到一個意外的T變量。 誤差在MySQL和PHP意外的T_Variable

('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')"; 

位於第15行我也有第二個錯誤在我的語法根據Dreamweaver中在第20行的

die('Error: ' . mysql_error()); 

如果有人可以幫助將不勝感激。先謝謝你。

回答

3

STOP

直接從帖子插入數據庫總是一個壞主意。這就是PHP目前堅持使用非直觀的魔術引號的原因。

您應該至少使用mysql_real_escape_string()來轉義您的數據。例如:

$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') 
OR die(mysql_error()); 

$query = "INSERT INTO users VALUES (
    '" . mysql_real_escape_string($_POST["username"]) . "', 
    '" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "', 
    '" . mysql_real_escape_string($_POST["email"]) . "', 
    '2' 
)"; 

mysql_query($query); 

您必須這樣做的原因是基於安全的。例如,如果某些惡意軟件將用戶名字段設置爲'); DROP TABLE users;,而沒有首先轉義您的數據。您最終會盲目地運行以下查詢:

INSERT INTO users VALUES (''); DROP TABLE users; 

哪一個當然不會很好地結束您的應用程序。

這是您應該做的最低

事實上,你應該真的移動到MySQLi這是一個更現代的MySQL接口。 下面是一個例子

$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database'); 

$query = "INSERT INTO users VALUES (
    '" . $mysqli->real_escape_string($_POST["username"]) . "', 
    '" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "', 
    '" . $mysqli->real_escape_string($_POST["email"]) . "', 
    '2' 
)"; 

$mysqli->query($query); 

你甚至可以在過程風格使用MySQL。所以如果面向對象的編程不在你的範圍內,你將不會遇到與MySQLi有關的問題。

希望有所幫助。

+0

好吧,現在我要離開你的mysql_real_escape_string;目前我仍然遇到你的錯誤以及調用未定義的函數mysql_connect,但我試圖對它進行排序;我被告知,這是從我的PHP擴展不加載,所以只要我可以得到所有想出來的,然後我會很好去,並能夠解決它應該正常工作。我修改了我的php.ini,所以現在我認爲在我的apache配置中存在一個潛在的原因。遲早我會找到解決方案併發布給大家。非常感謝小費; SQL注入。對我來說是新的。 – 2012-07-10 20:49:17

+0

我想我找到了問題。我檢查了CMD提示符裏面的語法並運行apache -t它告訴我 – 2012-07-11 02:24:26

+0

是的,它聽起來像是你沒有安裝MySQL模塊(windows)或者沒有使用MySQL(linux)編譯PHP。正如我記得舊的MySQL模塊不再與PHP捆綁在一起。您應該可以省去麻煩,只使用MySQLi模塊。 – 2012-07-11 17:25:10

1
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')"; 
1
($_POST["username"],$_POST["sha_pass_hash"],$_POST["email"],'2')"; 

失去周圍的變量:)

2
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')"; 

單引號刪除引號..

1

使用本:

('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2')