0

これをデータベースに入れようとしています。ただし、予期しないエラーが発生します。

クエリに失敗しました! SQL 構文にエラーがあります。1 行目の「order(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Delive」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

これが私の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!');

  }
  ?>

クエリの何が問題になっていますか?

4

2 に答える 2

1

デバッグのヒントをいくつか紹介します。これではなく:

$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補遺: クエリを見ると、 , $mobileandの周りにアポストロフィが必要だと思います$postcode(それらがすべて文字列であると仮定します)。$chargeとは数値であると推測さ$weightれるため、引用する必要はありません。

于 2013-08-31T08:57:38.117 に答える