関連記事: http://qiita.com/muzudho1/items/51f2ec976377625ff0f1
LAMP という言葉があるように、 Linux、Apache、MySQL、PHP は よく使われる組み合わせのようだ。
ここで、MySQL と PHP を実際に使ってみたい。
やりたいこと
データベースを用意する。
テーブル名: TAMESI1
NAME | AGE | WEIGHT |
---|---|---|
太郎 | 14 | 50 |
二郎 | 13 | 49 |
三郎 | 12 | 48 |
これぐらい つまらないデータでいいだろう。
ここに 追加で1行
NAME | AGE | WEIGHT |
---|---|---|
四郎 | 11 | 47 |
ぐらい加えられたら 御の字だ。
データは どこかのページで HTML出力して見れるようにしたい。
データベースを作る
CORE SERVER で用意しておく。
さて……、テーブルも作っておく必要があるか。
phpMyAdmin にアクセスしようと思ったんだが、パスワードを忘れた。
とりあえず phpMyAdmin を削除して インストールし直してみる。
入れない。
「コアサーバーでphpMyAdminにログインできない時にチェックする3つのこと」Design Color
http://designcolor-web.com/2012/04/23/coreserver-phpmyadmin/
1つ前の画面で確認できたのか。
phpMyAdmin 画面に入った。
適当にテーブルを作って、適当にデータを入れていく。
テーブルを用意したものの、次は どうするのか。
PHP
「[PHP] mysqli使い方まとめ(MySQL接続~SELECT実行まで)」Qiita
http://qiita.com/yasumodev/items/bd2ba476f31804d527d3
ベンキョウしよう……。
index.php
<?php
// 参考: http://qiita.com/yasumodev/items/bd2ba476f31804d527d3
// mysqliクラスのオブジェクトを作成
$mysqli = new mysqli('localhost', '★DBユーザー名', '★パスワード', '★DB名');
if ($mysqli->connect_error) {
echo $mysqli->connect_error;
exit();
} else {
$mysqli->set_charset("utf8");
}
// ここにDB処理いろいろ書く(後述)
// 完成済みのSELECT文を実行する
$sql = 'SELECT NAME, AGE, WEIGHT FROM TAMESI1';
if ($result = $mysqli->query($sql)) {
// 連想配列を取得
while ($row = $result->fetch_assoc()) {
echo $row['NAME'] . ', ' . $row['AGE'] . ', ' . $row['WEIGHT'] . '<br />';
}
// 結果セットを閉じる
$result->close();
}
// DB接続を閉じる
$mysqli->close();
「localhost」とそのまま書くことに 気づきにくかったが サンプル・プログラムほとんど そのまんまで 動いた。
データの追加
<?php
// ヒント: このファイルのエンコーディングを UTF-8 BOM有り にすること。
// 参考 : http://qiita.com/yasumodev/items/bd2ba476f31804d527d3
// mysqliクラスのオブジェクトを作成
$mysqli = new mysqli('localhost', '★DBユーザー名', '★パスワード', '★DB名');
if ($mysqli->connect_error) {
echo $mysqli->connect_error;
exit();
} else {
$mysqli->set_charset("utf8");
}
// ここにDB処理いろいろ書く(後述)
// 完成済みのSELECT文を実行する
$sql = "INSERT INTO TAMESI1 (NAME, AGE, WEIGHT) VALUES ('四郎', '11', '47')";
if ($result = $mysqli->query($sql)) {
// 成功時
// 結果セットを閉じる
$result->close();
}
// DB接続を閉じる
$mysqli->close();
テキストファイルのエンコーディングを UTF-8 BOM有り にしたら 文字化けが直った。
$mysqli->set_charset("utf8"); のところは、 utf8mb4 だと文字化けした。
ただ、このままだと 固定データしか挿入できないので、POST文字列などを使って可変にしたい。
挿入するフィールド・データを可変にしたい
<?php
// ヒント: このファイルのエンコーディングを UTF-8 BOM有り にすること。
// 参考 : http://qiita.com/yasumodev/items/bd2ba476f31804d527d3
// mysqliクラスのオブジェクトを作成
$mysqli = new mysqli('localhost', '★DBユーザー名', '★パスワード', '★DB名');
if ($mysqli->connect_error) {
echo $mysqli->connect_error;
exit();
} else {
$mysqli->set_charset("utf8");
}
// ここにDB処理いろいろ書く
// ひな型をもとにステートメントハンドルを取得する
$sql = "INSERT INTO TAMESI1 (NAME, AGE, WEIGHT) VALUES (?, ?, ?)";
if ($stmt = $mysqli->prepare($sql)) {
// 条件値をSQLにバインドする
// bind_param の第1引数 "is" は後続のデータ型を表します。
// i=integer、s=string、d=double、b=blob など。DATE型は s で良いみたいです。
// また下記のように値を引数内に直書きすることはできません。
// 誤)$stmt->bind_param("is", 123, "hanako");
$name = "五郎";
$age = 10;
$weight = 46;
$stmt->bind_param("sii", $name, $age, $weight);
// 実行
$stmt->execute();
$stmt->close();
}
// DB接続を閉じる
$mysqli->close();
なんのメリットがあるのか分からないが バインドを覚えた。
POST文字列 と対応させるには……。
JSON も覚えないと
「PHPでJSONデータの取得の仕方」Qiita
http://qiita.com/fantm21/items/603cbabf2e78cb08133e
なかなか うまくいかない。
グーグル・スプレッドシートの内容を rowData に入れて rensyu.php に投げるとする。
練習.gs
// JSObject to JSON
var json = JSON.stringify(rowData);
Logger.log(json);
// POST送信のテスト
var formData = {
'datas': json
};
var options = {
'method' : 'post',
'payload' : formData
};
UrlFetchApp.fetch("http://★サイトアドレス/rensyu.php", options);
.gs ファイルに付いては関連記事参照。
関連記事:http://qiita.com/muzudho1/items/51f2ec976377625ff0f1
これを rensyu.php で受け取る。
rensyu.php
<?php
// ヒント: このファイルのエンコーディングを UTF-8 BOM有り にすること。
// 参考 : http://qiita.com/yasumodev/items/bd2ba476f31804d527d3
if(isset($_POST['datas'])){
$datas =json_decode( $_POST['datas'], true);
// mysqliクラスのオブジェクトを作成
$mysqli = new mysqli('localhost', '★DBユーザー名', '★パスワード', '★DB名');
if ($mysqli->connect_error) {
echo $mysqli->connect_error;
exit();
} else {
$mysqli->set_charset("utf8");
}
// ここにDB処理いろいろ書く
// ひな型をもとにステートメントハンドルを取得する
$sql = "INSERT INTO TAMESI1 (NAME, AGE, WEIGHT) VALUES (?, ?, ?)";
if ($stmt = $mysqli->prepare($sql)) {
// 条件値をSQLにバインドする
// bind_param の第1引数 "is" は後続のデータ型を表します。
// i=integer、s=string、d=double、b=blob など。DATE型は s で良いみたいです。
// また下記のように値を引数内に直書きすることはできません。
// 誤)$stmt->bind_param("is", 123, "hanako");
$name = $datas[0]['名前'];
$age = $datas[0]['年齢(歳)'];
$weight = $datas[0]['体重(kg)'];
$stmt->bind_param("sii", $name, $age, $weight);
// 実行
$stmt->execute();
$stmt->close();
}
// DB接続を閉じる
$mysqli->close();
echo 'insert.';
}
else
{
echo 'error: post data not found.' . "\n";
}
途中 はしょったが、
これで POST文字列 にも対応できた。
やったぜ!