2016-03-31 83 views
0

我在使用網站的舊MySQL命令時遇到了問題。爲什麼這個MySQL命令不起作用

INSERT INTO 
     users(user_name, user_pass, user_email ,user_date, user_level) 
VALUES('" . mysql_real_escape_string($_POST['user_name']) . "', 
     '" . sha1($_POST['user_pass']) . "', 
     '" . mysql_real_escape_string($_POST['user_email']) . "', 
     NOW(), 
     0); 

它返回此錯誤。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'user_name']) . "', 
     '" . sha1($_POST['user_pass']) . "', 
     '" . mys' at line 3 

該網站上的文章是從2010年5月,所以這可能是它不工作的原因。這裏是網站:http://code.tutsplus.com/tutorials/how-to-create-a-phpmysql-powered-forum-from-scratch--net-10188。如果你需要更多的信息,我會編輯這個問題。

+0

該教程中的sql沒有任何問題。也許你應該完全按照你的實際代碼發佈。本教程在php中創建了一個變量 - 如果您將其與作者編寫的相同,則您的db永遠不會看到「$ _POST」變量 - 而是將這些變量的值連接到查詢中。 – billynoah

+0

**警告**:編寫您自己的訪問控制層並不容易,有很多機會讓它嚴重錯誤。請不要在[Laravel](http://laravel.com/)等任何現代開發框架(http://codegeekz.com/best-php-frameworks-for-developers/)上編寫自己的認證系統,內置了強大的[認證系統](https://laravel.com/docs/5.2/authentication)。絕對不會遵循[推薦的安全最佳實踐](http://www.phptherightway.com/#security),並且從不使用SHA1存儲密碼。 – tadman

+0

**警告**:如果您只是學習PHP,請不要學習過時的['mysql_query'](http://php.net/manual/en/function.mysql-query.php)界面。這很糟糕,並且已經在PHP 7中被刪除了。像[PDO不是很難學的東西](http://net.tutsplus.com/tutorials/php/why-you-should-be-using-php-pdo- for-database-access /)以及[PHP The Right Way](http://www.phptherightway.com/)等指南有助於解釋最佳實踐。除非您使用準備好的語句,否則您從一個巨大的SQL注入漏洞是一個錯誤。 – tadman

回答

-1

您需要在您的值內跳過單引號(每個POST後[))。

INSERT INTO 
     users(user_name, user_pass, user_email ,user_date, user_level) 
VALUES('" . mysql_real_escape_string($_POST[''user_name'']) . "', 
     '" . sha1($_POST[''user_pass'']) . "', 
     '" . mysql_real_escape_string($_POST[''user_email'']) . "', 
     NOW(), 
     0); 
+0

'$ _POST [''user_name'']'??你確定,或者這是一個錯字? – billynoah

+0

@billynoah我和你在一起。這完全沒有意義。 – tadman

+0

@tadman它的工作原理。 – SkrillexNukehulk