手册,对应于您的MySQL服务器版本,以便在附近使用正确的语法

时间:2012-06-26 08:45:12

标签: php mysql

我正在尝试将记录插入数据库,但它给了我一个错误。

我正在使用PHP和MySQL。

我需要一个成功的结果,但我收到一个错误,这是我的代码:

 $Pname = $_POST[Pname];
    $P_Price = $_POST[P_Price];
    $P_Desc = $_POST[P_Desc];
    $P_City = $_POST[P_City];
    $P_Size = $_POST[P_Size];
    $P_Rooms = $_POST[P_Rooms];
    $P_garage = $_POST[P_garage];
    $P_Address = $_POST[P_Address];
    $P_Long = $_POST[P_Long];
    $P_Lat = $_POST[P_Lat];
    $Provinces_idProvinces = $_POST[Provinces_idProvinces];

    // array for JSON response
    $response = array();

        $result = mysql_query("INSERT INTO property(Pname,P_Price,P_Desc,P_City,P_Size,P_Rooms,P_garage,P_Address,P_Long,P_Lat,Provinces_idProvinces)
        VALUES ('".$Pname."',".$P_Price.",'".$P_Desc."','".$P_City."','".$P_Size."','".$P_Rooms."',".$P_garage.",'".$P_Address."',".$P_Long.",".$P_Lat.",".$Provinces_idProvinces."'");

     if ($result) {
            // successfully inserted into database
            $response["success"] = 1;
            $response["message"] = $result ;

            // echoing JSON response
            echo json_encode($response);
        } else {
            // failed to insert row
            $response["success"] = 0;
            $response["message"] = mysql_error();

这是我的错误:

{"success":0,"message":"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''','','','',,'',,,'' at line 2"}

我检查了一切,但它仍然给我同样的错误。请帮助,现在差不多3天了。

以下是MySQL查询:

delimiter $$

CREATE TABLE `property` (
  `idProperty` int(11) NOT NULL AUTO_INCREMENT,
  `Pname` varchar(45) DEFAULT NULL,
  `P_Price` double DEFAULT NULL,
  `P_Desc` varchar(45) DEFAULT NULL,
  `P_City` varchar(45) DEFAULT NULL,
  `P_Size` varchar(45) DEFAULT NULL,
  `P_Rooms` varchar(45) DEFAULT NULL,
  `P_garage` int(11) DEFAULT NULL,
  `P_Address` varchar(45) DEFAULT NULL,
  `P_Long` int(11) DEFAULT NULL,
  `P_Lat` int(11) DEFAULT NULL,
  `P_Sold` tinyint(1) DEFAULT '0',
  `Provinces_idProvinces` int(11) NOT NULL,
  PRIMARY KEY (`idProperty`),
  KEY `fk_Property_Provinces` (`Provinces_idProvinces`),
  CONSTRAINT `fk_Property_Provinces` FOREIGN KEY (`Provinces_idProvinces`) REFERENCES `provinces` (`idProvinces`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1$$

1 个答案:

答案 0 :(得分:4)

您的查询存在许多问题:

  1. 您没有清理用户输入($_GET$_POST)中的值 - 至少使用mysql_real_escape_string ...
  2. 您的查询包含一些空值,因此您的查询中有,,, ...提交后验证表单并检查每个属性是否设置了值,以其他方式将其设置为''(空字符串) )或0(零)或null
  3. 你不假思索地使用撇号和引号......这是Yoyr查询(不是代码格式化为粗体) - 粗体是错误的撇号: INSERT INTO财产(PNAME,P_Price,P_Desc,P_City,P_SIZE,P_Rooms,P_garage,P_Address,P_Long,P_Lat,Provinces_idProvinces)VALUES('”。$ PNAME。 “ '”。$ P_Price “'”。$ P_Desc。 “ ''”。$ P_City。 “ ''”。$ P_SIZE。 “ ''”。$ P_Rooms。 “ '”。$ P_garage “'”。$ P_Address。 “””。$ P_Long 。“,”。$ P_Lat。“,”。$ Provinces_idProvinces。“'”);
  4. 在修复这三个错误/错误之后你会感觉良好。

    很少有建议:

    1. 始终清理每个用户输入! (这可能不是推荐)
    2. 您应验证表单并为空字段设置默认值
    3. 而不是现在使用已弃用的mysql_*至少使用mysqli_*或PDO。
    4. 此外,您使用的是不带引号的数组索引:

      $P_Price = $_POST[P_Price];
      

      除非P_Price是常量,否则您需要引用它:

      $P_Price = $_POST['P_Price'];
      

      激活错误报告以查看您导致的所有错误,然后修复它们:

      error_reporting(E_ALL);
      ini_set('display_errors', true);