2013-08-31 51 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是数字,因此不需要引用。

相关问题