sql >> データベース >  >> RDS >> Mysql

あるテーブルから別のテーブルへの値の挿入

    まず、SELECT *は絶対に使用しないでください 一部のコードでは、テーブル構造が変更された場合(決して言わないでください)、あなた(またはこのアプリケーションを維持する必要がある人)を噛みます。

    INSERTの使用を検討できます SELECTから値を取得します 直接:

    "INSERT INTO admin(userID, forename, ..., `password`, ...)
        SELECT userID, forename, ..., `password`, ...
        FROM jobseeker WHERE userID = ..."
    

    これを行うためにPHPを経由する必要はありません。

    mysql_real_escape_stringに依存した上記の例を使用してお詫びします この回答の以前のバージョンでは。 mysql_real_escape_stringの使用 良い考えではありません 、ただし、パラメータをクエリ文字列に直接入力するよりも、おそらくわずかに優れています。)

    使用しているMySQLエンジンはわかりませんが、これらのステートメントを1つのトランザクション内で実行することも検討する必要があります(MyISAMの代わりにInnoDBが必要になります)。

    さらに、 mysqliを使用することをお勧めします。 と準備されたステートメント パラメータをバインドできるようにするため:これは、入力値をエスケープする必要がない(SQLインジェクション攻撃を回避するための)はるかにクリーンな方法です。

    編集2:

    (魔法の引用符がオンになっている場合は、オフにすることをお勧めします。)

    $userID = $_GET['userID'];
    
    // Put the right connection parameters
    $mysqli = new mysqli("localhost", "user", "password", "db");
    
    if (mysqli_connect_errno()) {
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    }
    
    // Use InnoDB for your MySQL DB for this, not MyISAM.
    $mysqli->autocommit(FALSE);
    
    $query = "INSERT INTO admin(`userID`, `forename`, `surname`, `salt`, `password`, `profilePicture`)"
        ." SELECT `userID`, `forename`, `surname`, `salt`, `password`, `profilePicture` "
        ." FROM jobseeker WHERE userID=?";
    
    if ($stmt = $mysqli->prepare($query)) {
        $stmt->bind_param('i', (int) $userID);
        $stmt->execute();
        $stmt->close();
    } else {
        die($mysqli->error);
    }
    
    $query = "UPDATE user SET userType = 'admin' WHERE userID=?";
    
    if ($stmt = $mysqli->prepare($query)) {
        $stmt->bind_param('i', (int) $userID);
        $stmt->execute();
        $stmt->close();
    } else {
        die($mysqli->error);
    }
    
    $query = "DELETE FROM jobseeker WHERE userID=?";
    
    if ($stmt = $mysqli->prepare($query)) {
        $stmt->bind_param('i', (int) $userID);
        $stmt->execute();
        $stmt->close();
    } else {
        die($mysqli->error);
    }
    
    $mysqli->commit();
    
    $mysqli->close();
    

    編集3: あなたのuserIDに気づいていませんでした intでした(ただし、コメントで自動インクリメントされると言ったので、おそらくそれです):intにキャストするか、WHERE userID = '$userID' (ただし、DBから読み取るか、リクエストパラメータから読み取るかにかかわらず、変数をクエリに直接挿入しないでください)。



    1. 現在のGMT時刻のMySQLクエリ

    2. PostgreSQLユーザーパスワードを変更するにはどうすればよいですか?

    3. SQLServerを使用したアクセスの概要をご覧ください

    4. SQL Server(T-SQL)でログインのデフォルト言語を取得する2つの方法