【问题标题】:error in inserting to mysql by phpphp插入mysql时出错
【发布时间】:2016-12-09 16:48:30
【问题描述】:

我正在尝试插入数据库,它给了我这个:

插入错误 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本以获得正确的语法 在第 3 行使用靠近 ')' 在数据库中出现问题

public function set_Animal($Name,$Gender,$Allergie,$Age,$Weight,$Type_ID,$Owner_ID,$Colour){
    $Animal_Query= "INSERT INTO animal (Name,Gender,Allergie,Age,Weight,Type_ID,Owner_ID,Colour)
                    VALUES ($Name,$Gender,$Allergie,$Age,$Weight,$Type_ID,$Owner_ID,$Colour)";
    if(mysqli_query($this->conn,$Animal_Query)) {
        return true ;
    }
    else {
        echo "Error inserting ".mysqli_error($this->conn);
        return false ;
    }
}

【问题讨论】:

  • 也许您需要用单引号将具有字符数据类型的列括起来?例如:INSERT INTO animal (Name) VALUES ('$Name')
  • 首先尝试使用prepared statement。现在您的查询容易受到sql injection 的攻击。其次,正如@yogur 提到的,您必须将所有string 参数括在单引号
  • 伙计们我试过了..它也不起作用
  • 这真的很困扰我,因为我有 5 节课,而且效果很好
  • 你真的应该尝试prepared statement,因为即使你将string 变量括在单引号中,但你有单引号你的变量的文本,那么它会导致错误。如果您使用的是prepared statement,请编辑您的帖子并在您的帖子中添加新代码,以便我们调查新代码...

标签: php mysql insert


【解决方案1】:

要使您的代码正常工作,您必须用单引号将具有字符数据类型的列括起来。但是,这对 SQL 注入是可疑的。请改用准备好的语句。

假设所有列都是字符,除了年龄和体重是数字:

编辑:添加了检查$conn->prepare 是否成功。

public function set_Animal ($Name,$Gender,$Allergie,$Age,$Weight,$Type_ID,$Owner_ID,$Colour){

    $Animal_Query = "INSERT INTO animal (Name,Gender,Allergie,Age,Weight,Type_ID,Owner_ID,Colour) VALUES (?,?,?,?,?,?,?,?)";

    if($stmt = $conn->prepare($Animal_Query)){
        $stmt->bind_param("sssiisss", $Name, $Gender, $Allergie,$Age,$Weight,$Type_ID,$Owner_ID,$Colour);

        if($stmt->execute())
            return true;
        else
            return false;

    } else {
        printf("Errormessage: %s\n", $mysqli->error);
    }
    $stmt->close();
}

函数bind_param 将参数绑定到SQL 查询。 “sssiisss”参数列出了参数的数据类型。 s 字符告诉 mysql 参数是一个字符串,而 i 告诉它它是一个数字。

参数可能是以下四种类型之一:

i : 整数

d : 双倍

s : 字符串

b : BLOB

我们应该为每个参数设置一个。

【讨论】:

  • 应用您的建议时出现这些错误 致命错误:在非对象上调用成员函数 bind_param()
  • @IbrahemJadllah 您的 SQL 查询似乎存在语法错误。因此$conn->prepare失败,无法绑定参数。
  • @IbrahemJadllah 编辑代码以检查准备语句是否成功
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 2013-11-07
  • 2013-07-15
相关资源
最近更新 更多