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

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

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

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

PHP

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

解決済

phpからMySQLへの書き込みでの問題

can1980
can1980

総合スコア14

MySQL

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

PHP

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

2回答

0評価

0クリップ

452閲覧

投稿2022/01/04 15:34

phpからMySQLへの書き込みを行いたい

何故かNo0のデータにすべて書き込もうとしてしまうのが現状です。
入力データはNo81スタートで0は入っていないことをコード中のvar_dump($tmp)で確認しました。
ON DUPLICATE KEY UPDATEをつけたら全て0に書かれてしまいデータのどれかが間違っているというわけではないようです。
SQL文の間違いではないかと思うのですが、自分で検索した限り間違いはないように思うのです。
SQLの主キー、ユニークはNoになっています。

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

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'

該当のソースコード

PHP

foreach($dataArr as $tmp){ //var_dump($tmp); dbset($tmp); } var_dump("ok222"); function dbset($set){ try{ $sql_str="INSERT INTO `image_data`(`No`, `title`, `img`, `img_name`, `time`, `comment`, `Year`, `Seasons`, `Class`, `link_name`,`link_url`) VALUES (:no, :title, :img, :name, :date, :comment, :year, :season, :class, :link_name, :link_url)"; //文字エンコーディング $dbh = new PDO(SQLSETTING, USERNAME, PASSWORD, array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_MULTI_STATEMENTS => false, PDO::ATTR_EMULATE_PREPARES => false ) ); $stmt = $dbh->prepare($sql_str); $stmt->setFetchMode(PDO::FETCH_ASSOC); $a = $set["no"]; $stmt->bindParam(':no', $a, PDO::PARAM_STR); $b = $set["title"]; $stmt->bindParam(':title', $b, PDO::PARAM_STR); $c = $set["img"]; $stmt->bindParam(':img', $c, PDO::PARAM_STR); $a = $set["name"]; $stmt->bindParam(':name', $a, PDO::PARAM_STR); $b = $set["date"]; $stmt->bindParam(':date', $b, PDO::PARAM_STR); $c = $set["comment"]; $stmt->bindParam(':comment', $c, PDO::PARAM_STR); $a = $set["year"]; $stmt->bindParam(':year', $a, PDO::PARAM_STR); $b = $set["season"]; $stmt->bindParam(':season', $b, PDO::PARAM_STR); $c = $set["class"]; $stmt->bindParam(':class', $c, PDO::PARAM_STR); $a = $set["link_name"]; $stmt->bindParam(':link_name', $a, PDO::PARAM_STR); $b = $set["link_url"]; $stmt->bindParam(':link_url', $b, PDO::PARAM_STR); //SQL実行 $stmt->execute(); }catch(PDOException $e){ echo $e->getMessage(); }finally{ echo "func_end"; } }

PHP

array(12) { ["no"]=> int(84) ["title"]=> string(27) "ツマグロヒョウモン" ["img"]=> string(20357) "????JFIF``??>CREATOR: gd-jpeg v1.0 (using IJG JPEG v90), default quality バイナリデータは省略します。" ["name"]=> string(8) "04_09_26" ["date"]=> string(8) "04_09_26" ["comment"]=> string(6) "交尾" ["year"]=> string(2) "04" ["season"]=> string(3) "aut" ["class"]=> string(4) "tyou" ["link_name"]=> string(64) "「リンク名」" ["link_url"]=> string(48) "http:/hogehoge.co.jp/hoge.shtml"

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

can1980

2022/01/05 00:20

驚きました。 まさしく同じ現象でした。 文字型であった事によるエラーであったようです。 bindParam→bindValueで、何の問題もなくSQLにデータ挿入できました。 bindParamは使わない方がいいみたいですね。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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

PHP

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