【问题标题】:manual that corresponds to your MySQL server version for the right syntax to use near与您的 MySQL 服务器版本相对应的手册,以便在附近使用正确的语法
【发布时间】:2012-06-27 13:20:32
【问题描述】:

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

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

【问题讨论】:

  • “我检查了所有内容”您检查了查询实际上是什么样的吗?
  • SQL 注入,错误使用引号和撇号,调用后不检查查询的样子(您是否在查询中尝试echo

标签: php mysql


【解决方案1】:

您的查询有很多问题:

  1. 您没有清理来自用户输入($_GET$_POST)的值 - 为此至少使用 mysql_real_escape_string...
  2. 您的查询包含一些空值,因此您的查询中有,,,... 提交后验证表单并检查每个属性是否具有以其他方式设置的值,将其设置为''(空字符串)或@987654326 @(零)或null
  3. 您不假思索地使用撇号和引号...这是 Yoyr 查询(不是格式化为能够执行粗体的代码) - 粗体是错误的撇号: 插入属性(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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2014-08-01
    • 2018-12-23
    • 2020-02-09
    • 1970-01-01
    • 2015-02-12
    • 2016-08-06
    相关资源
    最近更新 更多