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

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

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

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

PHP

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

Q&A

解決済

1回答

8471閲覧

phpを使ってmysqlにデータをINSERTしたい

my_port_is_53

総合スコア43

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/08/23 09:13

お世話になります。

phpの基本を勉強している初心者です。
現在、phpを使ってmysqlのlocalhostsの'userdata'テーブルに,投稿番号,名前,コメント,日付,パスワードのレコードを挿入したいのですが、上手くいきません。
web上でいろいろ検索して、追加してみましたが、どれもうまくいきませんでした。
データベースの文字コードはutf8_general_ci
ソースコードの方の文字コードもutf-8にしてあります。

以下が私の記述した複数のコードです。

php

1<?php 2 3//変数 4$name = $_POST['user']; 5$com = $_POST['comment']; 6$pas = $_POST['pass']; 7 8//日本語、アルファベットが受け取れない 9$db = mysqli_connect('localhost','root','1234','db')or die(mysqli_connnect_error()); 10mysqli_set_charset($db, 'utf-8'); 11//%sを%dにしたらエラーは消えるが、文字を受け取らなくなる。 12$sql = sprintf('INSERT INTO userdata SET name = %s, comment = %s, pass = %s', 13 14//値がnameとcommentとpassならnameとcommentとpassの属性が空のレコードが追加される。 15//アラビア数字なら通常通り追加される。 16//それ以外はエラーで、unkown column $_POST['user']の値が表示 17mysqli_real_escape_string($db, $_POST['user']), 18mysqli_real_escape_string($db, $_POST['comment']), 19mysqli_real_escape_string($db, $_POST['pass']) 20); 21 22mysqli_query($db, $sql) or die(mysqli_error($db)); 23 24?> 25

レコードには、数字のみ反映されます。

他にもPDOなども試してみました。

php

1//変数宣言 2$name = $_POST['user']; 3$com = $_POST['comment']; 4$pas = $_POST['pass']; 5//実行すると以下の行でエラー 6//Notice: Undefined variable: pdo in C:\xampp\htdocs\php_app_kadai\database.php on line 13 7//Fatal error: Call to a member function prepare() on null in C:\xampp\htdocs\php_app_kadai\database.php on line 13 8 9$stmt = $pdo -> prepare("INSERT INTO userdata (name, comment, pass) VALUES (:name, :com, :pas)"); 10$stmt->bindParam(':name', $name, PDO::PARAM_STR); 11$stmt->bindParam(':com', $com, PDO::PARAM_STR); 12$stmt->bindParam(':pas', $pas, PDO::PARAM_STR); 13$stmt->execute(); 14

php

1$con = mysql_connect("localhost","root","1234") 2or die("MySQLに接続できません。"); 3mysql_select_db('userdata'); 4$sql = "SET CHARACTER SET UTF8"; 5$result = mysql_query($sql); 6 7$sql = "INSERT INTO `userdata` (`name`, `comment`, `pass`) VALUES (`$name`,`$com`,`$pas`)"; 8$result = mysql_query($sql); 9//以下の行でエラー 10//Warning: mysql_free_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\php_app_kadai\database.php on line 52 11mysql_free_result($result); 12mysql_close($con); 13

php

1$name = $_POST['user']; 2$com = $_POST['comment']; 3$pas = $_POST['pass']; 4 5//エラー無しデータベースに反映されない 6$db = new PDO("mysql:host:localhost;dbname=db","root","1234"); 7$st = $db->prepare("INSERT INTO userdata (name, comment,pass) VALUES (?,?,?)"); 8$st->bindParam(1,$name); 9$st->bindParam(2,$com); 10$st->bindParam(3,$pas); 11$st->execute(); 12//行数は0でレコードは増えなかった 13print mysql_affected_rows(); 14

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

どのコードも微妙に間違ってるだけなんだけど…
mysql_* 系の関数は覚えても意味がないのでスルーします。
mysqli_* 系は…sprintf の使い方が間違ってます。

php

1//変数宣言 2$name = $_POST['user']; 3$com = $_POST['comment']; 4$pas = $_POST['pass']; 5 6//実行すると以下の行でエラー 7//Notice: Undefined variable: pdo in C:\xampp\htdocs\php_app_kadai\database.php on line 13 8//Fatal error: Call to a member function prepare() on null in C:\xampp\htdocs\php_app_kadai\database.php on line 13 9 10//これ足りない 11$pdo = $db = new PDO("mysql:host=localhost;dbname=db","root","1234"); 12 13$stmt = $pdo -> prepare("INSERT INTO userdata (name, comment, pass) VALUES (:name, :com, :pas)"); 14$stmt->bindParam(':name', $name, PDO::PARAM_STR); 15$stmt->bindParam(':com', $com, PDO::PARAM_STR); 16$stmt->bindParam(':pas', $pas, PDO::PARAM_STR); 17$stmt->execute();

php

1$name = $_POST['user']; 2$com = $_POST['comment']; 3$pas = $_POST['pass']; 4 5//エラー無しデータベースに反映されない 6// $db = new PDO("mysql:host:localhost;dbname=db","root","1234"); 7$db = new PDO("mysql:host=localhost;dbname=db","root","1234"); 8 9$st = $db->prepare("INSERT INTO userdata (name, comment,pass) VALUES (?,?,?)"); 10$st->bindParam(1,$name); 11$st->bindParam(2,$com); 12$st->bindParam(3,$pas); 13$st->execute(); 14//行数は0でレコードは増えなかった 15//print mysql_affected_rows(); // <- PDO使っているのにmysql_* では取得できません。 16echo $st->rowCount();

投稿2015/08/23 09:33

編集2015/08/23 09:38
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

my_port_is_53

2015/08/23 09:38

ありがとうございます。 早速ためさせて頂きます。
my_port_is_53

2015/08/23 09:58

無事解決致しました。 迅速な回答ありがとございます。 sqlとsqliについては意識していませんでした。 PDO使っているのにmysql_* では取得できないということなので、ライブラリが異なることは知りませんでした。教えて頂きありがとうございます。
退会済みユーザー

退会済みユーザー

2015/08/23 10:03

PHPの公式リファレンスは内容もわかりやすく、具体的な記述例も豊富です。ほとんどの場合、ここを読むだけで自己解決できると思いますので、一度、通読するといいですよ。 http://php.net/manual/ja/book.pdo.php
my_port_is_53

2016/02/23 17:36

ありがとうございます! 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問