2013-07-15 36 views
0

我在PHP的MYSQL查詢中遇到了非描述性的語法錯誤。如果我「回顯」查詢的文本並將其粘貼到MySQL查詢窗口中,則代碼有效。下面是SQL的查詢,錯誤代碼和錯誤信息......插入來自PHP的查詢的MySQL語法錯誤

INSERT INTO ADVERTISEMENTS (`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES (2, 'Test New Ad', 'http://www.google.com', 'red_arrow.png', '#000000', '1980-05-11 00:00:00', '2020-05-01 00:00:00', 5, '2013-07-14 22:21:59'); 

錯誤代碼:1064
錯誤信息:您的SQL語法錯誤;檢查對應於你的MySQL服務器版本在1號線

這裏是我使用的PHP代碼使用近「」正確的語法手冊...

$link = mysqli_connect($UM_Settings["database_options"]["server_name"], $UM_Settings["database_options"]["username"], $UM_Settings["database_options"]["password"], $UM_Settings["database_options"]["database_name"]); 

$advertisementNameNew = mysqli_real_escape_string($link, $_POST['advertisementNameNew']); 
$destinationURLNew = mysqli_real_escape_string($link, $_POST['destinationURLNew']); 
$dropboxUploadFile = mysqli_real_escape_string($link, $_POST['dropboxUploadFile']); 
$backgroundColorNew = mysqli_real_escape_string($link, $_POST['backgroundColorNew']); 
$bannerStartDateNew = DateStringToMySQL($_POST['bannerStartDateNew']); 
$bannerEndDateNew = DateStringToMySQL($_POST['bannerEndDateNew']); 
$bannerSetTimerNew = intval($_POST['bannerSetTimerNew']); 
$tmpUserID = UM_GetCookie("UM_UserID"); 
$tmpAddDate = DateStringToMySQL('now'); 

echo "INSERT INTO ADVERTISEMENTS(`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES ($tmpUserID, '$advertisementNameNew', '$destinationURLNew', '$dropboxUploadFile', '$backgroundColorNew', '$bannerStartDateNew', '$bannerEndDateNew', $bannerSetTimerNew, '$tmpAddDate');<br />"; 

if (!mysqli_query($link, "INSERT INTO ADVERTISEMENTS(`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES ($tmpUserID, '$advertisementNameNew', '$destinationURLNew', '$dropboxUploadFile', '$backgroundColorNew', '$bannerStartDateNew', '$bannerEndDateNew', $bannerSetTimerNew, '$tmpAddDate');")) { 
    printf("Error Code: %s\n", mysqli_errno($link)); 
    echo "<br />"; 
    printf("Error Msg: %s\n", mysqli_error($link)); 
} 

我知道,數據庫連接正在工作。我可以選擇和更新表格。我也可以用不同的查詢插入到其他表中。

我願意接受任何建議。

非常感謝您的幫助!

+0

請在插入查詢前回顯所有變量,以便您可以知道值是否丟失。 – Bharu

+0

我覺得你沒有使用'mysqli' [好方法](http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php);我注意到你用';'結束了你的陳述,這在API調用中可能不需要。 – Passerby

+0

嘗試'(重音)廣告(重音)'失去;在最後...你在哪裏回顯行將它存儲到變量'echo $ query =「INSERT INT ....'然後在你的'if(!(mysqli_query($ link,$ query))){}' –

回答

0

路人,謝謝你的評論。這是我第一次使用mysqli的經驗,我改變了我的查詢使用「bind_param」方法,現在一切正常。對於有類似問題的其他人,這裏是更正的代碼...

 $mysqli = new mysqli($UM_Settings["database_options"]["server_name"], $UM_Settings["database_options"]["username"], $UM_Settings["database_options"]["password"], $UM_Settings["database_options"]["database_name"]); 
    if ($mysqli->connect_errno) { 
     echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
    } 

    $advertisementNameNew = $_POST['advertisementNameNew']; 
    $destinationURLNew = $_POST['destinationURLNew']; 
    $dropboxUploadFile = $_POST['dropboxUploadFile']; 
    $backgroundColorNew = $_POST['backgroundColorNew']; 
    $bannerStartDateNew = DateStringToMySQL($_POST['bannerStartDateNew']); 
    $bannerEndDateNew = DateStringToMySQL($_POST['bannerEndDateNew']); 
    $bannerSetTimerNew = intval($_POST['bannerSetTimerNew']); 
    $tmpUserID = UM_GetCookie("UM_UserID"); 
    $tmpAddDate = DateStringToMySQL('now'); 

    /* Prepared statement, stage 1: prepare */ 
    if (!($stmt = $mysqli->prepare("INSERT INTO `ADVERTISEMENTS` (`user_id`, `ad_name`, `click_url`, `img_url`, `bg_color`, `start_date`, `end_date`, `timer_delay`, `add_date`) VALUES (?,?,?,?,?,?,?,?,?)"))) { 
     echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; 
    } 

    if (!$stmt->bind_param("issssssis",$tmpUserID, $advertisementNameNew, $destinationURLNew, $dropboxUploadFile, $backgroundColorNew, $bannerStartDateNew, $bannerEndDateNew, $bannerSetTimerNew, $tmpAddDate)) { 
     echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; 
    } 

    if (!$stmt->execute()) { 
     echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; 
    } 


    $_GET['ad_id'] = $stmt->insert_id; 
    $stmt->close(); 
1

我在查詢字符串中看到一些錯誤。首先,將所有變量作爲字符串傳遞:「... VALUES($ tmpUserID,'$ advertisementNameNew',...」應該是「... VALUES(」。$ tmpUserID。「,'」 。$ advertisementNameNew 「」,......」

其次,我看周圍是否缺少$ bannerSetTimerNew報價

第三,有一個額外的;

這裏我將如何編寫查詢。:

if (!mysqli_query($link, "INSERT INTO ADVERTISEMENTS (user_id, ad_name, click_url, img_url, bg_color, start_date, end_date, timer_delay, add_date) VALUES (".$tmpUserID.", '".$advertisementNameNew."', '".$destinationURLNew."', '".$dropboxUploadFile."', '".$backgroundColorNew."', '".$bannerStartDateNew."', '".$bannerEndDateNew."', '".$bannerSetTimerNew."', '".$tmpAddDate."')")) { ... 

我沒有測試它。

希望這有助於。

0

我在查詢結尾看到一個;。你確定應該在那裏嗎?

0

有兩件事 1.刪除;從查詢結束開始。 2.我希望timer_delay字段的數據類型爲「Int」,如果它的VARCHAR,那麼你將不得不包含該字段值的引號。

我希望這會有所幫助。