• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:素材を比較して共通項目数をデータベースに格納したい)

PHPを使用してデータベースに共通項目数を格納する方法

このQ&Aのポイント
  • PHPを使用してデータベースに共通項目数を格納する方法を教えてください。
  • データベース'compare'のテーブル'answers'に質問formから送信された回答と比較して、共通項目数を求め、データベース'compare'の'result'テーブルに結果を格納したい。
  • PHPのコードを試しましたが、値が格納されませんでした。どうすればうまく格納できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

MySQLもphpも、最新記述が使えるversionですので、データベース接続部とSQL文発行のところを以下のようにすると良いでしょう。 <?php /* 接続DSN ここで文字コードを指定 */ $dsn='mysql:dbname=compare;host=localhost;charset=utf8'; $user='root'; $password=''; try{ $dbh=new PDO($dsn, $user, $password); /* 例外モードに設定 */ $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql='SELECT code,r1,r2,r3 FROM answers WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $list = array(); while( $rec=$stmt->fetch(PDO::FETCH_ASSOC) ){ $s = 0; /* $question1, $question2, $question3 には、postデータを格納済みのこと */ if($rec['r1']==$question1) $s ++; if($rec['r2']==$question2) $s ++; if($rec['r3']==$question3) $s ++; $list[] = array( ':id'=>$rec['code'] , ':commons'=> $s ); } $sql = "INSERT INTO results (id, commons) VALUES (:id, :commons)"; $stmt = $dbh->prepare($sql); foreach ($list as $row) { $stmt->execute($row); } /* 新規素材情報をテーブルanswersの最後に格納。int型の場合は個別bind必要 */ $sql='INSERT INTO answers(r1,r2,r3) VALUES (?,?,?)'; $stmt=$dbh->prepare($sql); $stmt->bindValue(1, $question1, PDO::PARAM_INT); $stmt->bindValue(2, $question2, PDO::PARAM_INT); $stmt->bindValue(3, $question3, PDO::PARAM_INT); $stmt->execute(); } catch (PDOException $e) { echo '<div>えらー:' , e.getMessage() , "</div>\n"; } /* 最後に接続を切る */ $stmt = null; $dbh = null;

その他の回答 (1)

  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

まずは、エラーが出てないかを表示するところから始めるべき。 先頭で error_reporting(-1); としておくとよい。 $_POSTの値は、filter_input()を利用して不正なデータが入ってないかチェックすべき。 PDOの接続はSQL発行ごとに毎回つなぎ直すようなことはしない。おなじオブジェクトを使い回す方がよい。 で、データをfetchする前におおもとの $dbh を null にすると接続情報がキャンセルされて、1行もデータを得てないのでは? あと、sql文のエラーは、PDO接続時に例外発生モードにしてtry{}catch{}しないと知ることはできない。 文字コード設定も set names 発行ではなく、接続時設定で指定するのが最もセキュリティも高いのだが、phpやmysqlはどのversion なのだろうか?

pintxos
質問者

お礼

ご回答ありがとうございます。 ご進言を基にもう一度見直し、改定をしてみます。 MySQLは5.6.20 PHPは5.5.15 です。

関連するQ&A