假設您的形式是正確的,它是發佈要你的腳本中的值。
(你灑你的代碼echo
,以確保這樣的話?)
將數據發送到一個SQL語句,因此到MySQL的最簡單可靠的方法是使用準備好的語句。
到這裏看看:http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php
基本上你寫它沒有你的變量的SQL語句(與?
代替),然後告訴MySQL與你的變量之後執行語句。它避免了逃避字符串的需要,並且擔心如何構建事物。
舉個例子,你可能有:
// Connect to mysql
$mysqli = new mysqli('where your server is', 'my_user', 'my_password', 'world');
// Build the initial statement - easier to read as you don't have your string concatenation here
$stmt = $mysqli->prepare("INSERT INTO Entries (myoption1) VALUES (?)");
// Tell mysql that the '?' should be replaced with the value in your post array
$stmt->bind_param("s", $POST['myselectbox']);
// Execute the statement
$stmt->execute()
很顯然,你應該添加錯誤處理過,但文檔佔地面積這個基礎。
SQL注入
的主要原因爲什麼使用準備語句是一個不錯的想法是,它避免了SQL注入攻擊。
還有其他方法,但在我看來,這是最簡單的解決方案。
SQL注入攻擊是有人試圖通過將其他SQL「注入」您的語句來更改正在運行的SQL語句的情況。
使用你的代碼作爲一個例子,你可以執行以下語句:
$sql = "INSERT INTO Entries (myoption1) VALUES ('". $_POST['myselectbox'] ."')";
通常會接受(我們認爲)類似myoption1
。
這將導致SQL之中:
INSERT INTO Entries (myoption1) VALUES ('myoption1');
如果有人決定,他們可以發送'='' OR '1'='1
這將導致SQL之中:
INSERT INTO Entries (myoption1) VALUES (''='' OR '1'='1');
哪(顯然)是非常不同的。
或者,更糟糕的發送'=')'; DROP TABLE Entries WHERE (''='
這將導致SQL之中:
INSERT INTO Entries (myoption1) VALUES (''=''); DROP TABLE Entries WHERE (''='');
使用預準備語句
簡單地說,但使用準備好的語句,你告訴MySQL的你要發送的是一個字符串作爲參數。它永遠不能被視爲聲明本身的一部分,因此上述是不可能的。
更安全。
我希望能讓它更清晰。如果你想要更多的信息,我建議你單獨研究它...
你必須用'''''method'屬性將'
我是一個初學者..你能給我一些關鍵字爲什麼我必須搜索以獲得'wieder圖片'謝謝 –
我最喜歡的讀物之一仍然是[symfony HTTP基礎知識](http://symfony.com/ DOC /電流/電子書/ http_fundamentals.html);尋找HTTP協議,分離問題和路由。 – moonwave99