好吧,所以我寫了一個register.php腳本,當命令嘗試執行時,我得到一個意外的T變量。 誤差在MySQL和PHP意外的T_Variable
('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";
位於第15行我也有第二個錯誤在我的語法根據Dreamweaver中在第20行的
die('Error: ' . mysql_error());
如果有人可以幫助將不勝感激。先謝謝你。
好吧,所以我寫了一個register.php腳本,當命令嘗試執行時,我得到一個意外的T變量。 誤差在MySQL和PHP意外的T_Variable
('$_Post[username]','$_Post[sha_pass_hash]','$_Post[email]','2')";
位於第15行我也有第二個錯誤在我的語法根據Dreamweaver中在第20行的
die('Error: ' . mysql_error());
如果有人可以幫助將不勝感激。先謝謝你。
直接從帖子插入數據庫總是一個壞主意。這就是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有關的問題。
希望有所幫助。
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";
($_POST["username"],$_POST["sha_pass_hash"],$_POST["email"],'2')";
失去周圍的變量:)
($_Post["username"],$_Post["sha_pass_hash"],$_Post["email"],'2')";
單引號刪除引號..
使用本:
('".$_Post[username]."','".$_Post[sha_pass_hash]."','".$_Post[email]."','2')
好吧,現在我要離開你的mysql_real_escape_string;目前我仍然遇到你的錯誤以及調用未定義的函數mysql_connect,但我試圖對它進行排序;我被告知,這是從我的PHP擴展不加載,所以只要我可以得到所有想出來的,然後我會很好去,並能夠解決它應該正常工作。我修改了我的php.ini,所以現在我認爲在我的apache配置中存在一個潛在的原因。遲早我會找到解決方案併發布給大家。非常感謝小費; SQL注入。對我來說是新的。 – 2012-07-10 20:49:17
我想我找到了問題。我檢查了CMD提示符裏面的語法並運行apache -t它告訴我 – 2012-07-11 02:24:26
是的,它聽起來像是你沒有安裝MySQL模塊(windows)或者沒有使用MySQL(linux)編譯PHP。正如我記得舊的MySQL模塊不再與PHP捆綁在一起。您應該可以省去麻煩,只使用MySQLi模塊。 – 2012-07-11 17:25:10