繁体   English   中英

通过PHP插入MySQL错误

[英]error in inserting to mysql by php

我试图插入数据库,它给了我这个:

插入错误您的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 ;
    }
}

为了使代码正常工作,您必须将具有字符数据类型的列用单引号引起来。 但是,这对于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

对于每个参数,我们应该使用其中之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM