-1

これはしばらくの間私を悩ませてきました、私はこれを試しました:

            $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();

id が 0 になり、姓と名がデータベースで :first_name と :last_name になるため、bindParam 部分は明らかに機能しません。だから私はこれを試しました:

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

再び、id = 0 を取得し、姓と名 = :first_name, :last_name をデータベースで取得します! ここで何が間違っていますか?

4

1 に答える 1

2

ステートメントを準備するとき、バインドされたパラメーターを引用符で囲む必要はありません。実際、@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
        );
        ");

さらに、挿入に NULL のフィールドがある場合は、それらを省略してもかまいません。

于 2013-05-27T12:37:44.727 に答える