質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2570閲覧

phpで処理が2回走ってしまう

ryoma1126

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/12/08 05:16

発生している問題・エラーメッセージ

wordpressでphpからmysqlのsql文を実行しているのですがInsertが2回実行されており、どうも高速で2回更新が走っているようです

該当のソースコード

php

1session_start(); 2if (apcu_add($_SERVER['REMOTE_ADDR'], 1, 1)) { 3if(!(isset($_SESSION['id']))){ 4 header('Location:https://'); 5 exit(); 6 } 7 //DB情報省略 8try { 9 // PDOインスタンスの作成 10 $db = new PDO($dsn, $user, $password); 11 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 12 // プリペアドステートメントを作成 13 $stmt = $db->prepare(" 14 INSERT INTO sample (id,title,content,date,kinds,difficulty,comment) 15 VALUES (:id,:title,:content,:date,:kinds,:difficulty,:comment); 16 "); 17 18 // プリペアドステートメントにパラメータを割り当てる 19 $stmt->bindParam(':id', $id, PDO::PARAM_STR); 20 $stmt->bindParam(':title', $title, PDO::PARAM_STR); 21 $stmt->bindParam(':content', $content, PDO::PARAM_STR); 22 $stmt->bindParam(':date', date("Y-m-d H:i:s"), PDO::PARAM_STR); 23 $stmt->bindParam(':kinds', $kinds, PDO::PARAM_STR); 24 $stmt->bindParam(':difficulty', $difficulty, PDO::PARAM_STR); 25 $stmt->bindParam(':comment', $comment, PDO::PARAM_STR); 26 // クエリの実行 27 $stmt->execute(); 28 29} catch (PDOException $e){ 30 exit('エラー:' . $e->getMessage()); 31 } 32 }

試したこと

apcu_add($_SERVER['REMOTE_ADDR'], 1,1)で1秒以内に2回以上アクセスされたらsqlを実行しないようにしたが(apcu_add($_SERVER['REMOTE_ADDR'], 1, 1)を入れたらそもそも両方通らなくなった

補足情報(FW/ツールのバージョンなど)

xServer
プラグイン:XYZ PHP Cord

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ショートコードのプラグイン使用というところが怪しいところですが
とりあえずWPで1回のリクエストで2回処理が走るケースの代表格
cronが原因の可能性を試しましょう

wp_doing_cronでcronで呼び出されたのか判定して
cron処理ではキャッシュ追加処理含めて処理を走らせないようにしてみましょう

ショートコードで走らせていることが原因の場合
同じ投稿に対するショートコード実行が
1度のリクエストで複数回発生することはままあることなので
その辺を踏まえた実装方法を検討しましょう

投稿2021/12/08 06:53

KazuhiroHatano

総合スコア7819

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoma1126

2021/12/08 23:53

ありがとうございます。調べたところショートコードが原因のようでした。なのでphpとhtmlのファイルを分けてphpのファイルのほうはexitで抜けるように実装しました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問