2016-03-17 344 views
0

我想輸入數據到數據庫(這是一個反應腳本),但我總是得到一個錯誤,這是在讓我瘋狂。INSERT INTO數據庫將無法工作

這是我使用的代碼:似乎

if (mysql_query("INSERT INTO gastenboek (naam, bericht, datum, ip, plantid) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', $datum_reactie, '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."', $id)")) { 
     echo '<span style="color:green; font-weight: bold"Je reactie is succesvol toegevoegd!</span>'; 
    } else { 
     echo '<span style="color:green; font-weight: bold">Er is iets fout gegaan en je reactie is niet toegevoegd. Probeer het later opnieuw.</span>'; 
    } 

這不工作。 但是,當我使用下面的代碼顯示的數據:

if (mysql_query("INSERT INTO gastenboek (naam, bericht, datum, ip, plantid) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', $datum_reactie, '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."', $id)")) { 
     echo '<span style="color:green; font-weight: bold"Je reactie is succesvol toegevoegd!</span>'; 
    } else { 
     echo '<span style="color:green; font-weight: bold">Er is iets fout gegaan en je reactie is niet toegevoegd. Probeer het later opnieuw.</span>'; 
     $qry = "INSERT INTO gastenboek (naam, bericht, datum, ip, plantid) VALUES ('".trim(mysql_real_escape_string($_POST['naam']))."', '".trim(mysql_real_escape_string($_POST['bericht']))."', $datum_reactie, '".mysql_real_escape_string($_SERVER['REMOTE_ADDR'])."', $id)"; echo $qry; 
    } 

這就是我得到: enter image description here

所以一切似乎是正確的?

這是我的數據庫是什麼樣子: enter image description here

+4

'所以,一切似乎是正確的'不,你需要大約日期 –

+1

使用綁定變量的單引號?;將防止此錯誤並保護您免受SQL注入攻擊 –

+1

您冷添加一些基本的錯誤檢查,我不知道如果您甚至不檢查錯誤,您將如何調試代碼 –

回答

0

看起來你在第三列需要大約日期值引號。

您可能想要使用綁定變量,因爲它會使引號更易於使用並且更安全(從SQL注入的角度來看)。像這樣的東西:

$stmt = mysqli_prepare($db, "INSERT INTO gastenboek (name, bericht, datum, ip, platid) VALUES (?, ?, ?, ?, ?)"); 

mysqli_stmt_bind_param ($stmt, 'sssss', $_POST['naam'], $_POST['bericht'], $datum_reactie, $_SERVER['REMOTE_ADDR'], $id); 

mysqli_stmt_execute($stmt); 
0

嘗試引用您的'日期'字段。這可能會爲你解決問題。

0

你可以使用(http://php.net/manual/en/function.mysql-error.php):

echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 

返回的mysql的最後一個錯誤。正如所說的Lashane把'$ datum_reactie'

此外,我必須說:「不要使用msysql_ *,它已被棄用」。

0

由於各種原因(語法錯誤,不存在的表/列,權限不足等),查詢可能會失敗。最好的辦法是使用mysql_error()在失敗時打印錯誤(在else {}中)/mysql_errno()。

0

是的...這些都是很VARCHAR或文本你必須有一個所有值引用