php-prepare和execute在不添加新值的情况下继续执行

php-prepare和execute在不添加新值的情况下继续执行,php,mysql,database,execute,prepare,Php,Mysql,Database,Execute,Prepare,这让我烦恼了一段时间,我尝试过: $stmt = self::$conn->prepare(" INSERT INTO `database`.`table` ( `facebook_id` , `email` , `first_name` , `last_name` , `gender` )

这让我烦恼了一段时间,我尝试过:

            $stmt = self::$conn->prepare("
            INSERT INTO `database`.`table` (
            `facebook_id` , 
            `email` ,
            `first_name` ,
            `last_name` ,
            `gender`
            )
            VALUES (
            ':id', NULL , ':first_name', ':last_name', NULL
            );
            ");

            $stmt->bindParam(':id', $id);
            $stmt->bindParam(':first_name', $first_name);
            $stmt->bindParam(':last_name', $last_name);
            $stmt->execute();
            $stmt->execute(array(
                ':id' => 457897541,
                ':first_name' => $first_name,
                ':last_name' => $last_name
            ));
bindParam部分显然不起作用,因为在数据库中id变为0,first和last name变为:first_name和:last_name。所以我试了一下:

            $stmt = self::$conn->prepare("
            INSERT INTO `database`.`table` (
            `facebook_id` , 
            `email` ,
            `first_name` ,
            `last_name` ,
            `gender`
            )
            VALUES (
            ':id', NULL , ':first_name', ':last_name', NULL
            );
            ");

            $stmt->bindParam(':id', $id);
            $stmt->bindParam(':first_name', $first_name);
            $stmt->bindParam(':last_name', $last_name);
            $stmt->execute();
            $stmt->execute(array(
                ':id' => 457897541,
                ':first_name' => $first_name,
                ':last_name' => $last_name
            ));

同样,我在数据库中得到id=0,first和n last name=:first\u name,:last\u name!我做错了什么?

在准备语句时,不需要引用绑定参数。事实上,正如@Voictus所说,您不能这样做——它将变量转换为实际字符串。
prepare()
调用将为您处理报价

您应该改为:

        $stmt = self::$conn->prepare("
        INSERT INTO `database`.`table` (
        `facebook_id` , 
        `email` ,
        `first_name` ,
        `last_name` ,
        `gender`
        )
        VALUES (
        :id, NULL , :first_name, :last_name, NULL
        );
        ");

另外,如果insert中的字段为空,则不妨省略它们。

不需要在SQL语句中引用绑定参数。我相信这样做会把它们变成字符串,而不是要解释的变量。@andrewsi把它写成一个答案!:)这让你有一段时间很恼火,但你并没有按照手册上告诉你的方式去做。因为,为什么要使用手册,它是无用的,最好这样问。我当然试过了,就像手册中那样,我没有注意到有什么“区别”。。这很奇怪吗@N.B.。你没有帮助别人,而是利用时间在网上侮辱你不认识的人。蠢人谢谢安德鲁斯,我帮了你。下一次你不读东西,事情不顺利时,你会记得有人告诉你你很愚蠢。另一方面,你有能力让自己放松。你是否做这件事取决于你自己。我知道被告知阅读很糟糕,但是是的,阅读并按照手册上的说明去做。而且要小心。如果你这么做的话,像我这样的傻瓜的数量将达到0。