2013-08-31 50 views
0

我想把它放到數據庫中。然而,我收到一個意外的錯誤,但是,說:查詢失敗!您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊

查詢失敗!你的SQL語法有錯誤;檢查對應於你的MySQL服務器版本在第1行

這裏附近使用「命令(order_date的,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,國內配送」正確的語法手冊是我的PHP:

<?php 
//error_reporting(E_ERROR | E_PARSE); 
include("includes/db.php"); 
include("includes/functions.php"); 

if($_REQUEST['command']=='update') 
{ 
$date  = date('Y-m-d'); 
$time  = time('H:i:s'); 
$charge = $_REQUEST['ocharge']; 
$fname = $_REQUEST['ofname']; 
$lname = $_REQUEST['olname']; 
$mobile = $_REQUEST['omobile']; 
$add1  = $_REQUEST['oadd1']; 
$add2  = $_REQUEST['oadd2']; 
$postcode = $_REQUEST['opostcode']; 
$state = $_REQUEST['ostate']; 
$country = $_REQUEST['ocountry']; 
$weight = $_REQUEST['oweight']; 
$credit = $_REQUEST['ocredit']; 
$pin  = $_REQUEST['opin']; 
$city  = $_REQUEST['ocity']; 



    $result=mysql_query("insert into order(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Delivery_HP,Delivery_Street1,Delivery_Street2,Delivery_Postcode,Delivery_State,Delivery_Country,Total_Weight,Credit_No,Pin_No,Delivery_City) values ('$date',$time,$charge,'$fname','$lname',$mobile,'$add1','$add2',$postcode,'$state','$country',$weight,$credit,$pin,'$city')"); 

    if($result === FALSE) 
    { 
      die("Query Failed!".mysql_error().$result); 
    } 

    $orderid=mysql_insert_id(); 


    $max=count($_SESSION['cart']); 
    for($i=0;$i<$max;$i++) 
    { 
     $pid=$_SESSION['cart'][$i]['productid']; 
     $q=$_SESSION['cart'][$i]['qty']; 
     $price=get_price($pid); 

     mysql_query("insert into order_detail (Order_ID,Product_ID,Order_Quantity,Sub_Total) values ('$orderid','$pid','$q','$price')");  
    } 

    die('Thank You! your order has been placed!'); 

    } 
    ?> 

有什麼不對查詢

+0

當報告這種問題時,它也有助於「回顯」SQL並在您的問題中提供它(以及PHP代碼),以便我們可以看到錯誤的位置。但是,您提供的PHP很好,這表明您在查詢中存在多個SQL注入漏洞。轉義用戶輸入將是一個好的開始,但參數化(帶有更好的數據庫庫,如PDO)會更好。 – halfer

+0

我應該糾正什麼? –

+1

對於'$ _REQUEST'(或任何用戶輸入)的每次使用,通過['mysql_real_escape_string'](http://www.php.net/manual/en/function.mysql-real-escape-string)運行每一個。 PHP)。確保在使用此函數時連接到數據庫,因爲它需要數據庫連接才能完全工作。閱讀「SQL注入」 - 這是一個漏洞,允許惡意用戶在您的數據庫上執行未經授權的SQL(例如刪除行)。 – halfer

回答

5

ORDERreserved keyword所以,你需要逃避它在反引號,像這樣:

INSERT INTO `order` ... 

在查詢中不使用保留關鍵字將是更好的解決方案,但是使用反引號也可以將其轉義。

+0

我試圖在反引號中逃避它,但仍然有同樣的問題。 –

+0

你正在收到什麼確切的錯誤信息? –

+0

查詢失敗!您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'order'(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Del')附近使用正確的語法 –

0

這裏有一些調試技巧。而不是這樣的:

$result=mysql_query("insert into order(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Delivery_HP,Delivery_Street1,Delivery_Street2,Delivery_Postcode,Delivery_State,Delivery_Country,Total_Weight,Credit_No,Pin_No,Delivery_City) values ('$date',$time,$charge,'$fname','$lname',$mobile,'$add1','$add2',$postcode,'$state','$country',$weight,$credit,$pin,'$city')"); 

始終做到這一點:

$sql ="insert into order(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Delivery_HP,Delivery_Street1,Delivery_Street2,Delivery_Postcode,Delivery_State,Delivery_Country,Total_Weight,Credit_No,Pin_No,Delivery_City) values ('$date',$time,$charge,'$fname','$lname',$mobile,'$add1','$add2',$postcode,'$state','$country',$weight,$credit,$pin,'$city')"; 
$result = mysql_query($sql); 

這使得它微不足道的,在你的代碼時,也這樣做:

echo htmlentities($sql); 

會告訴你的您正在使用查詢(而不是構建查詢的PHP代碼,這可能會在您的值中隱藏難懂的字符)。

最後,考慮編寫這樣的代碼:

$sql = " 
    INSERT INTO order (
     Order_Date, Order_Time, Delivery_Charge, 
     Delivery_Fname, Delivery_Lname, Delivery_HP, 
     Delivery_Street1, Delivery_Street2, Delivery_Postcode, 
     Delivery_State, Delivery_Country, Total_Weight, 
     Credit_No, Pin_No, Delivery_City 
    ) 
    VALUES (
     '$date', $time, $charge, 
     '$fname', '$lname', $mobile, 
     '$add1', '$add2', $postcode, 
     '$state', '$country', $weight, 
     $credit, $pin, '$city' 
    ) 
"; 
$result = mysql_query($sql); 

我有大寫的SQL並格式化查詢,使其可讀的,所以你可以確保你的提供正確的價值右欄。現在不需要水平滾動(在您的編輯器或屏幕上)。

如註釋中所示,如果您採用這種方法進行數據庫插入,則需要確保所有值都正確地轉義,特別是如果它們來自用戶輸入。然而,參數化是一個更好的方法,注意現在不推薦使用「mysql」庫。

附錄:看看查詢,我會說你需要撇號$time$mobile$postcode(假設它們都是字符串)。我認爲$charge$weight是數字,因此不需要引用。

相關問題