6

編集: 私の問題は、数字を含む文字列を持つ $user_id を int 型の user_id 列に挿入しようとしていることに気付きました。文字列を整数に変換しました。それでもエラーはよくわかりませんでした。ですが、時間の都合上、また別の機会に。

http://www.php-login.netで提供されている高度なバージョンの php ログイン システムの上に Web サイトを構築しようとしています。スクリプトの Registration クラスには、新しいユーザーをデータベースに追加する関数があり、そのコードはまったく問題なく動作します。

$query_new_user_insert = $this->db_connection->prepare('INSERT INTO users (user_name, user_password_hash, user_email, user_activation_hash, user_registration_ip, user_registration_datetime) VALUES(:user_name, :user_password_hash, :user_email, :user_activation_hash, :user_registration_ip, now())');
$query_new_user_insert->bindValue(':user_name', $user_name, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_password_hash', $user_password_hash, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_email', $user_email, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_activation_hash', $user_activation_hash, PDO::PARAM_STR);
$query_new_user_insert->bindValue(':user_registration_ip', $_SERVER['REMOTE_ADDR'], PDO::PARAM_STR);
$query_new_user_insert->execute();

// id of new user
            $user_id = $this->db_connection->lastInsertId();

            if ($query_new_user_insert) {
                // send a verification email
                if ($this->sendVerificationEmail($user_id, $user_email, $user_activation_hash)) {
                    // when mail has been send successfully
                    $this->messages[] = $this->lang['Verification mail sent'];
                    $this->registration_successful = true;
                } else {
                    // delete this users account immediately, as we could not send a verification email
                    $query_delete_user = $this->db_connection->prepare('DELETE FROM users WHERE user_id=:user_id');
                    $query_delete_user->bindValue(':user_id', $user_id, PDO::PARAM_INT);
                    $query_delete_user->execute();

                    $this->errors[] = $this->lang['Verification mail error'];
                }
            } else {
                $this->errors[] = $this->lang['Registration failed'];
            }

次のコードを使用して、サイトの別の部分にそのコードをコピーしようとしました。

public function addNewTag($postContent) {
    if ($this->databaseConnection()) {
        $query_add_tag = $this->db_connection->prepare('INSERT INTO tags (tag_name, tag_short_name, tag_id, color, user_id, creation_time) 
VALUES(:tag_name, :tag_short_name, :tag_id, :color, :user_id, :creation_time)');
        $query_add_tag->bindValue(':tag_name', $postContent['tag_name'], PDO::PARAM_STR);
        $query_add_tag->bindValue(':tag_short_name', $postContent['tag_short_name'], PDO::PARAM_STR);
        $query_add_tag->bindValue(':tag_id', rand(100000000000, 999999999999), PDO::PARAM_STR);
        $query_add_tag->bindValue(':color', $postContent['color'], PDO::PARAM_STR);
        $query_add_tag->bindValue(':user_id', $user_id, PDO::PARAM_STR);
        $query_add_tag->bindValue(':creation_time', time(), PDO::PARAM_STR);
        $query_add_tag->execute();
        if ($query_add_tag) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}

関数は、コードで $postContent の変数として $_POST で呼び出されます

$content->addNewTag($_POST);

そうすると、関数は true ("1") を返しますが、データベースの内容を確認しても何も追加されません。ここで何が問題になる可能性がありますか? 私は mySQL が得意ではないので、スクリプトの別の場所で明らかなエラーが発生している可能性があります。

4

1 に答える 1

0

で走っていautocommit=0ますか?autocommit=1その場合は、関数の最後に commitを設定または追加してください。次のようになります。

$query_add_tag->commit();
于 2015-08-11T07:58:10.503 に答える