2017-01-09 98 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

相關問題