2016-04-23 43 views
-5

我試圖從擁有大約1990年字符到MySQL形式插入數據。如何插入不工作。當我var_damp變量的內容顯示正確的內容。當我將它設置爲一個空字符串插入的作品。我已經完成了我的研究,但仍然無法工作。我不想上傳文件。這些字符來自我形式的textarea。PHP:如何將大量表單數據插入到mysql的

下面是插入代碼:

if (isset($_POST['val'])) { 
    $score = $_POST['val']; 
    $course = $_POST['course']; 
    $mysqli->query("INSERT INTO `evaluate` (`id`, `course`, `score`) VALUES (Null, '$course', '$score')"); 

注:是得分列已在數據庫類型的文本。

+5

您的代碼很容易受到SQL注入,在這種情況下,你可能實際上是SQL注入意外自己。你的長字符串是否恰好包含單引號(''')字符? – Chris

+0

你爲什麼不逃避長串? http://php.net/manual/es/mysqli.real-escape-string.php –

+0

是的,我剛纔看到你向我指出它後 – spirit

回答

1

這是一個常見的問題,因爲大多數介紹給mysqli不包括它的時候了,即使它應該是你學習的第一件事。插入任何數據庫,尤其是SQL,需要仔細轉義您提供的值。這些逃跑的方式根據平臺的不同而不同,但好消息是,mysqli可以爲您處理。

的關鍵是使用prepared statements

$stmt = $mysqli->prepare("INSERT INTO evaluate (course, score) VALUES (?,?)"); 
$stmt->bind_param('ss', $_POST['course'], $_POST['val']); 
$stmt->execute(); 

現在是最好enable exceptions讓任何錯誤都不會被忽略。偶爾我們都會犯一些小錯誤,如果沒有任何警告,那麼這些錯誤可能會成爲巨大的痛苦。例外會造成很多噪音。

如果你剛開始使用PHP和數據庫,您可能希望使用PDOmysqli的一些原因,或像DoctrinePropel更高級別的數據庫層使用,這使得顯著更好地評估數據庫更令人愉快。

0

我有一個單引號(')文本,而不是逃避它意味着SQL語句被錯誤地解釋

正確的方法去,你必須始終做到這一點,就是:

$score = $mysqli->real_escape_string($_POST['val']); $course = $mysqli->real_escape_string($_POST['course']); $mysqli->query("INSERT INTO評估( ID ,當然,得分)VALUES (Null, '$course', '$score')");

+1

做到這一點的最佳方法是使用['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php),而不是由手動逸出。諸如'$ score'之類的東西不應該出現在查詢中,因爲它所需要的只是一個錯誤而且很脆弱。通過使用佔位符解決這個問題,並且你永久解決了這個問題。 – tadman

+0

採取@tadman的建議和好運 – Drew

+1

@tadman您的建議是採取。謝謝 – spirit