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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

5回答

198閲覧

PHPでデータベースのSQLをやっているのですが・・・

kondokaisya

総合スコア25

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2018/04/16 09:46

前提・実現したいこと

PHPで作成しているフォームをデータベースに送るSQLがうまく機能しない

該当のソースコード

try{
$d = new PDO("mysql:host=localhost;dbname=db","root","1234");
print "接続成功<br>";
} catch (PDOException $e) {
exit('データベース接続失敗。'.$e->getMessage());
}

$karams = 'namae,nen,sex,jusyo,tel,mail,index,toi';

$value = "'".$namae."','".$nen."','".$sex."','".$jusyo."',
'".$denwa."','".$mail."','".$index."','".$naiyou."'";

$d->query("INSERT INTO form1 ($karams) values ('$value')");

試したこと

$d->query("INSERT INTO
form1 (namae,nen,sex,jusyo,tel,mail,index,toi)
values ('$namae','$nen','$sex','$jusyo',
'$denwa','$mail','$index','$naiyou')");
↑これでもデータベースに記入できませんでした。
一応接続成功は出ているのでmysqlには入れているとは思います。

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

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

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

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

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

guest

回答5

0

まず、$value を表示してみてください。
意図しているものと違うことが分かると思います。

次に、マニュアルを見てください。
文字列
引用符と二重引用符で実行結果が違うことが分かると思います。

で、少し難しくなりますが、以下を参照すると良いです。
PHPでデータベースに接続するときのまとめ

DB 接続は、基本ですが結構やっかいです。
試行錯誤しながら、セキュアな使い方を覚えてください。

投稿2018/04/16 10:00

編集2018/04/16 10:05
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2018/04/16 10:11

ほんと、この記事有能すぎ
退会済みユーザー

退会済みユーザー

2018/04/16 10:28

前半完全に勘違いしていた回答にもかかわらず、リンク貼っただけで高評価が入る mpyw さんの記事すげぇw 最近になってやっと書いてあること全部理解できた気がする。 何度も読み返すべき良い記事だと思います。 せっかくナンで、こっちも読むと良いです。 https://qiita.com/mpyw/items/2f9955db1c02eeef43ea
m.ts10806

2018/04/20 04:41

私も月に1回は回答に貼ってる気がします。(そういえば今日も)
guest

0

ベストアンサー

prepare()→bindValue()→execute()の繰り返しをして、
最後にcommit()しよう。
PHP: PDOStatement::bindValue - Manual

php

1try{ 2 $d = new PDO("mysql:host=localhost;dbname=db;charset=utf8mb4","root","1234",[ 3 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 4 PDO::ATTR_EMULATE_PREPARES => false, 5 ]); 6 print "接続成功<br>"; 7 $d->beginTransaction(); // トランザクション開始 8 9 $s = $d->prepare("INSERT INTO form1 (`namae`,`nen`,`sex`,`jusyo`,`tel`,`mail`,`index`,`toi`) values (:namae,:nen,:sex,:jusyo,:tel,:mail,:index,:toi)"); // SQLインジェクション対策にはprepare 10 $s->bindValue(':namae', $namae, PDO::PARAM_STR); 11 $s->bindValue(':nen', $nen, PDO::PARAM_STR); 12 $s->bindValue(':sex', $sex, PDO::PARAM_STR); 13 $s->bindValue(':jusyo', $jusyo, PDO::PARAM_STR); 14 $s->bindValue(':tel', $tel, PDO::PARAM_STR); 15 $s->bindValue(':mail', $mail, PDO::PARAM_STR); 16 $s->bindValue(':index', $index, PDO::PARAM_STR); 17 $s->bindValue(':toi', $toi, PDO::PARAM_STR); 18 $s->execute(); 19 20 $d->commit(); // コミットも忘れずに 21 22} catch (PDOException $e) { 23 exit('データベース接続失敗。'.$e->getMessage()); 24} 25

みたいな書き方になるかと。
接続時に例外をスローするようにしたのと、utf8接続指定したのと。
カラム名をバッククォートで囲むと、予約語とかぶっても安心。
もしも数値型のカラムの場合は、PDO::PARAM_STRじゃなくPDO::PARAM_INTを使います。

投稿2018/04/16 10:01

編集2018/04/16 10:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kondokaisya

2018/04/16 23:51

助かりました、何とかなりそうです^^
guest

0

質問のプログラムコードは対応しているMarkdownの機能 の[コードを入力]を使いましょう。

PHPで作成しているフォームをデータベースに送るSQLがうまく機能しない

差支えない限り、エラーメッセージは表示された内容をそのまま載せてください。CREATE TABLE文も載せましょう。

コピペで簡単に済む業界ではありませんから、まずは、PHPからデータベースに接続 辺りをじっくり勉強されては?

投稿2018/04/16 09:58

Orlofsky

総合スコア16415

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

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

0

とりあえずindexは予約語なのでカラム名につかっているなら
バッククォートで囲んで下さい
また、insertするデータはprepareで処理して下さい

投稿2018/04/16 09:55

編集2018/04/16 09:56
yambejp

総合スコア114775

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

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

0

rootでテストされていますよね。

PHP

1query("INSERT INTO form1 ($karams) values ('$value')");

このあとにcommit文を実施されていますか。

投稿2018/04/16 09:59

kawakawa2018

総合スコア1195

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

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

m.ts10806

2018/04/20 04:42

mysqlは明示的に設定いじらない限りオートコミットだったと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問