2017-01-09 92 views
0

我一直在尝试将一些数据插入到我的数据库中以查看事件页面。我有一个html表单和一个单独的脚本,如下所示,提交似乎经过了enameidimgsrc的值,但没有任何结果。任何更多,我得到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 'when, descr, positions) VALUES (测试, 1 , www.vzdc.org , 2017-1-20 23:59:00 ' at line 1我已经做了一些研究,但也许这只是我的一端的一个奇怪的错误?我相当新的MySQL,我会喜欢一些帮助!谢谢,下面的代码。SQL通过HTML表单插入数据时出现的错误

<!-- HTML form --> 
<form id="newevent" action="insertevent.php" method="post"> 
       <p>Event Name:</p><input name="ename" type="text" width="100"> 
       <p>ID:</p><input name="id" type="text" size="5"> 
       <p>Banner Link:</p><input name="imgsrc" type="text" size="50"> 
       <p>Description</p><input name="descr" type="text" height="1000px" > 
       <p>Date/Time (yyyy-mm-dd HH:MM:SS):</p><input name="when" type="text"> 
       <p>Positions (ONE per line)</p><textarea name="positions" form="newevent" rows="10" cols="50"></textarea><br> 
       <input value="Add Event" type="submit"> 
      </form> 

/* PHP script on insertevent.php */ 
<?php 
$link = mysqli_connect("localhost", "root", "xxx", "xxx"); 

// Check connection 
if($link === false){ 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
} 

// Escape user inputs for security 
$ename = mysqli_real_escape_string($link, $_POST['ename']); 
$id = mysqli_real_escape_string($link, $_POST['id']); 
$imgsrc = mysqli_real_escape_string($link, $_POST['imgsrc']); 
$when = mysqli_real_escape_string($link, $_POST['when']); 
$descr = mysqli_real_escape_string($link, $_POST['descr']); 
$positions = mysqli_real_escape_string($link, $_POST['positions']); 

// attempt insert query execution 
$sql = "INSERT INTO events (ename, id, imgsrc, when, descr, positions) VALUES (`$ename`, $id , `$imgsrc`, `$when`, `$descr`, `$positions`)"; 
if(mysqli_query($link, $sql)){ 
    echo "Records added successfully."; 
} else{ 
    echo "ERROR: Could not execute $sql. " . mysqli_error($link); 
} 

// close connection 
mysqli_close($link); 
?> 

回答

2

不要使用back-ticks作为绑定变量到您的查询,而是使用单个ticks。您可以使用反单引号的表和列名:

INSERT INTO `events` (`ename`, `id`, `imgsrc`, `when`, `descr`, `positions`) 
VALUES ('$ename', '$id', '$imgsrc', '$when', '$descr', '$positions') 

WHEN也是保留字,所以最好更改其名称。

而且由于你使用mysqli_* API了,检查prepared statement

+0

谢谢!那样做了。我在那里和那里看到了准备好的声明,但知道我知道。非常感激。 – guisbonddev

0

您使用的是SQL保留字作为列名。

$sql = "INSERT INTO events (ename, id, imgsrc, when, descr, positions) VALUES (`$ename`, $id , `$imgsrc`, `$when`, `$descr`, `$positions`)"; 

你真的不应该,但如果你想离开这一点,围绕你的表/列名背部蜱```,这样的:

$sql = "INSERT INTO `events` (`ename`, `id`, `imgsrc`, `when`, `descr`, `positions`) VALUES ('$ename', '$id' , '$imgsrc', '$when', '$descr', '$positions')"; 

我已经删除你的背后滴答着你的价值观,因为,他们不应该在那里。

请学习和使用MySQLi prepared statements。他们会帮助的。

+1

@ LoganWayne对你的答案有什么区别? –

+0

我觉得这不是很深入,所以我加了一个解释**为什么** OP有错误,再加上一些其他的阐述。没有规则反对,是否存在? – shalvah

+1

不幸的是,你的代码也会产生错误,因为你没有在查询中用单引号括起字符串变量(并且你错过了一个back-tick) – EhsanT

相关问题