【发布时间】:2013-09-03 23:00:58
【问题描述】:
我正在尝试将其放入数据库。但是,我遇到了一个意外错误,说:
查询失败!您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“order(Order_Date,Order_Time,Delivery_Charge,Delivery_Fname,Delivery_Lname,Delive”附近使用正确的语法。
这是我的 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!');
}
?>
查询有什么问题?
【问题讨论】:
-
当报告此类问题时,它还有助于
echo输出 SQL 并在您的问题(以及 PHP 代码)中提供它,以便我们可以看到错误在哪里。但是,您提供的 PHP 很好,这表明您在查询中存在多个 SQL 注入漏洞。转义用户输入将是一个好的开始,但参数化(使用更好的数据库库,如 PDO)会更好。 -
我应该纠正什么?
-
对于
$_REQUEST(或任何用户输入)的每次使用,通过mysql_real_escape_string运行每一个。确保在使用此功能时已连接到数据库,因为它需要数据库连接才能完全工作。还要阅读“SQL 注入” - 这是一个允许恶意用户在您的数据库上执行未经授权的 SQL(例如删除行)的漏洞。 -
感谢您的信息,我得到了答案,谢谢。