0

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

我正在使用 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$$
4

1 回答 1

4

您的查询有很多问题:

  1. 您没有清理用户输入($_GET$_POST)中的值 - 至少mysql_real_escape_string用于此...
  2. 您的查询包含一些空值,因此您,,,的查询中有...在提交后验证表单并检查每个属性是否具有以其他方式设置的值,将其设置为''(空字符串)或0(零)或null
  3. 您不假思索地使用撇号和引号......这是Yoyr查询(不是格式化为能够做粗体的代码) - 粗体是错误的撇号:INSERT INTO property (Pname, P_Price, P_Desc, P_City, P_Size, P_Rooms, P_garage, P_Address, P_Long, P_Lat, Provinces_idProvinces) 值 ('".$Pname."', ".$P_Price.", '".$P_Desc."', '".$P_City."', '".$ P_Size."', '".$P_Rooms."', ".$P_garage.", '".$P_Address."', ".$P_Long.", ".$P_Lat.", ".$Provinces_idProvinces. " '" );

修复这三个错误/错误后,你应该很好。

几点建议:

  1. 始终清理每个用户输入!(这可能不是推荐)
  2. 您应该验证表单并为空字段设置默认值
  3. 而不是使用如今已弃用的mysql_*功能我们至少mysqli_*或 PDO。

此外,您正在使用不带引号的数组索引:

$P_Price = $_POST[P_Price];

除非P_Price是一个常数,你需要引用它:

$P_Price = $_POST['P_Price'];

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

error_reporting(E_ALL);
ini_set('display_errors', true);
于 2012-06-26T09:00:48.117 回答