サポート » 使い方全般 » SQLでinsertに失敗する際のエラーの取り方

  • 解決済 ruri528002

    (@ruri528002)


    オリジナルで作成したテーブルにinsertを発行するとエラーになってしまいます。

    下記は投稿ページからajaxを投げてfunction.phpで実行させています

    selectは問題なく取得できていて、$dataが空の場合にinsertを実行しようとしました。

    ・insertの書き方でおかしいところあれば指摘してほしいです。

    ・エラーになった場合、正常に終了した場合などを取得する方法が知りたいです

    よろしくお願いいたします。

    $data='';
    global $wpdb;
    
    $rows = $wpdb->get_results("SELECT * FROM wp_test WHERE id ='" .$_POST['post_id']. "'");
    
    foreach ($rows as $row)
    {
      $data = $row->post_id;
    }
    
    if ($data==''){
      //Insert
      $tablename = "wp_test";
      $wpdb->insert(
        $tablename,
        array(
          'id' => $_POST['post_id'],
        ),
        array(
          '%s',
        )
      );
    
      $data = "ok";
    
    }
    
    wp_send_json_success($data);
    wp_die();
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • ruri528002さん、こんにちは。

    ・エラーになった場合、正常に終了した場合などを取得する方法が知りたいです

    大抵の場合は、ドキュメントに記載されていますので、まずは wpdb::insert ( https://developer.wordpress.org/reference/classes/wpdb/insert/ ) のドキュメントを読みましょう。

    Return

    int|false The number of rows inserted, or false on error.

    とあるように 成功すると 挿入された行数が返ります。また、エラーの際は、 false が返ります。

    ご質問内容には直接関係ありませんが、以下コードについて、POSTデータを生のSQL文に挿入しているので、SQLインジェクションの危険があります。

    $rows = $wpdb->get_results("SELECT * FROM wp_test WHERE id ='" .$_POST['post_id']. "'");

    POSTデータを適切にサニタイズしたり、プリペアードステートメント($wpdb->prepare)などを使うとよいと思います。
    (用語の意味や使い方などは調べてみてください)

    トピック投稿者 ruri528002

    (@ruri528002)

    KOJIさん!

    ありがとうございます!!

    wordpressの初めて見ました!!

    すごく丁寧に書かれて驚きでしたw

    おかげで無事実現することができました!!

    ありがとうございました!

    トピック投稿者 ruri528002

    (@ruri528002)

    Aki Hamanoさん!

    なるほどです!たしかに考慮しておいた方がいいですね

    アドバイスありがとうございます!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「SQLでinsertに失敗する際のエラーの取り方」には新たに返信することはできません。