LoginSignup
2
3

More than 1 year has passed since last update.

PHPでMySQLにデータを突っ込もうぜ

Last updated at Posted at 2017-04-08

関連記事: 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出力して見れるようにしたい。

データベースを作る

Gazo

CORE SERVER で用意しておく。

さて……、テーブルも作っておく必要があるか。

phpMyAdmin にアクセスしようと思ったんだが、パスワードを忘れた。

とりあえず phpMyAdmin を削除して インストールし直してみる。
入れない。

「コアサーバーでphpMyAdminにログインできない時にチェックする3つのこと」Design Color
http://designcolor-web.com/2012/04/23/coreserver-phpmyadmin/

1つ前の画面で確認できたのか。

phpMyAdmin 画面に入った。

Gazo

Gazo

適当にテーブルを作って、適当にデータを入れていく。

Gazo

テーブルを用意したものの、次は どうするのか。

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」とそのまま書くことに 気づきにくかったが サンプル・プログラムほとんど そのまんまで 動いた。

Gazo

データの追加

<?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();

Gazo

テキストファイルのエンコーディングを 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();

Gazo

なんのメリットがあるのか分からないが バインドを覚えた。
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文字列 にも対応できた。

やったぜ!

2
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3