2017-02-15 10 views
0

wordpressのテーブルにデータを挿入して、自動増加ID値を返します。wordpress wpdbに挿入された行IDを返します

私はこれを行うが、これらの両方がエラーがあります。

INSERT INTO wp_sho_app_form (job_id, first_name, last_name) VALUES(1, 'Caldwell', 'Estrada'); 
SELECT LAST_INSERT_ID(); 

このコードワードをうまくMySQLではなく、$wpdbで、私はこのエラーを取得する:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT LAST_INSERT_ID()' at line 1

私も$wpdb->queryによって、このステートメントを呼び出すと、 $wpdb->get_resultsですが、両方ともエラーがあります。 何らかの理由で$wpdb->insertを使用したくないので、このタイプのコードを使用する必要があります。

答えて

0

カスタムクエリを実行し、別のクエリを実行して、テーブルの最後の項目を選択することができます。スタンドアロンのPHPファイルを使用している場合は、wp-load.phpファイルをインクルードしてwordpress関数を取得する必要があります。

$query = " 
    INSERT 
    INTO wp_sho_app_form 
    (job_id, first_name, last_name) 
    VALUES 
    (1, 'Caldwell', 'Estrada') 
"; 
$wpdb->query($query); 
$query = " 
    SELECT * 
    FROM wp_sho_app_form 
    ORDER BY col_id desc 
    LIMIT 1 
"; 
$wpdb->query($query); 
+1

あなたは多くのトラフィックを持っている場合は昇給の条件の問題の多くを引き起こす可能性があること:AJAXのワードプレスのように私が最初に接続の詳細を取得するのwp-config設定 FLEを見つけるために、チェックロードされません。両方のクエリの間に、別のユーザーが挿入を行う可能性があります。次に、あなたの挿入されたエントリからIDを取得しないでください。 – Stony

+0

@Christopher as Stonyこれは、同じ時間の挿入時に問題を引き起こす可能性があり、データベースへの余分なクエリをたくさん引き起こします! –

+0

私はストーニーに同意します、私自身がフレームワークで動作します。私はちょうどテストのポイントを証明しています。大規模では間違いなく問題があるでしょう。 –

2

正しい方法はinsert_idです。

$lastid = $wpdb->insert_id; 

新しいエントリと大量のトラフィックがある場合は、別のクエリの整合性が取れない場合は、それは有線の問題を引き起こします。

これは挿入後にしか動作しないため、使用する必要があります。フレームワークと戦わないでください。

+0

ありがとう、しかし私が書いたように、私は挿入メソッドを使用することはできません。 $ _POSTからいくつかのデータを収集するので、私は自分のORMシステムのinsertメソッドにそれらのすべてを送ります。 wpdbのinsert mthodを使うと、テーブルの列よりも余分なフィールドがあるので、このメソッドは余分なフィールドにエラーがあります。 –

+0

一方、私は、関連するいくつかの更新と挿入を含むトランザクションのような何かを行う必要があります。だから私はこの種のスクリプトを実行する必要があります。 –

+0

クエリの後にその行を実行してください。おそらくその働き。 – Stony

0

wpdbで複数のクエリを実行する方法はありません。私が最後に見つけた解決策は、direclty MySqliを使用しています。私はそれを行うためにこの2つの機能を書いた。それはsombodyのために有用かもしれません。

public static function run_query($query) 
    { 
     $wp_config_path = script_generator::get_wp_config_path(); 
     if($wp_config_path == null){ 
      echo 'Could not found wp_config file!'; 
      return; 
     } 
     require_once $wp_config_path; 
     $mysqli = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 
// Check connection 
     if (mysqli_connect_errno()) { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
     } 

     $result_count = 0; 
     $result_set = array(); 
     if ($mysqli->multi_query($query)) { 
      do { 
       $current_result_count = 0; 
       $current_result = array(); 
       if ($result = $mysqli->use_result()) { 
        while ($row = $result->fetch_row()) { 
         $current_result[$current_result_count] = $row; 
         $current_result_count++; 
        } 
        $result->close(); 
       } 
       $result_set[$result_count] = $current_result; 
       if ($mysqli->more_results()) { 
        $result_count++; 
       } 
      } while ($mysqli->next_result()); 
     } 

     /* close connection */ 
     $mysqli->close(); 

     return $result_set; 
    } 

    function get_wp_config_path(){ 
     $dir = dirname(__FILE__); 
     do { 
      if(file_exists($dir."/wp-config.php")) { 
       return $dir."/wp-config.php"; 
      } 
     } while($dir = realpath("$dir/..")); 
     return null; 

    } 
関連する問題