2016-03-17 176 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或文本你必须有一个所有值引用