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

mysqlselectforeachの後に行を更新します

    最初の問題は、準備されたステートメントをまったく利用していなかったことです。パラメータを使用します(? クエリで)、execute()の値を入力します 電話してください。

    また、ループの外側でクエリを準備し、ループの内側で実行します。これは、ステートメントを事前に準備することの重要な利点の1つであり、ステートメントを1回だけ準備する場合のオーバーヘッドが少なくなります。

    最後に、クエリの前にデータベースをチェックしてから、2つのクエリのいずれかを実行する必要はありません。 INSERT...ON DUPLICATE KEY UPDATEを使用して、MySQLに値がすでに存在するかどうかを確認させます。 構文。これは、データベースが適切に設定されていることに依存しているため、UNIQUEが必要です。 (session.usr_id, session.site_id)のインデックス 。

    これはテストされていませんが、うまくいくはずです:

    $stmt1 = $handler->prepare("SELECT id,comments,likes,views FROM sites WHERE usr_id = ?");
    $stmt2 = $handler->prepare("INSERT INTO session SET comments = ?, likes = ?, views = ?, usr_id = ?, site_id = ? ON DUPLICATE KEY UPDATE comments = VALUES(comments), likes = VALUES(likes), views = VALUES(views)");
    
    $stmt1->execute(array($usr_id));
    while($row = $stmt1->fetch(PDO::FETCH_ASSOC)) {
        $site_id = $row["id"];
        $stmt2->execute(array($comments, $likes, $views, $usr_id, $site_id));
    }
    


    1. 複数のテーブルからデータを選択しますか?

    2. SQL-複数の列にカウント

    3. 複数のTIMESTAMP列を持つ1つのMysqlテーブル

    4. プロアクティブなMySQLモニタリング(Developer Studio / Advisors Angle)