20210128のMySQLに関する記事は4件です。

PHP,MySQLで開発したアプリをFTPを使いデプロイする(備忘録)

FTPを使ったデプロイ手法

FTPを初めて使いデプロイした際、沼に入ったので備忘録として残します。

開発手法

MAMPのパッケージを使いPHP、MySQLを使用しアプリを実装しました。

FTPとは

サーバーにファイルをアップロード、またはその逆でファイルをダウンロードしたりしWebアプリやWebサイトをデプロイできるサービスです。
今回使用したのはFileZilaです。

サーバーの用意

サーバーは用意されていたものがあったのでそれを使用。

サーバーに接続

.FailZilaを開きローカルで開発したディレクトリに移動します
サーバーの接続
ファイル(F)をクリックしサイトマネージャー(F)をクリックし用意されてるサーバー情報を記入します。
ホスト名、ユーザー名、パスワードを記載し接続できたら
先ほどローカルで開発した、アップロードしたいファイルを右クリックしアップロードすればサーバーにファイルをアップロードできます。リモートにアップロードしたファイルを右クリックし[URLをクリップボードにコピー]を選択し
Googleに公開情報を確認

沼に落ちたmysql構文

よしこれでデプロイできる!!と思いきや...あれ?エラーが起きてる...
DB関係で...
色々調べたら、DBをlocalにしておりそれをリモート環境のDBに反映できていなかったです。
そりゃそうだ...DBはローカルでしか保存させてないもんな...ローカル構文でしか記述してないもんな...知識不足は恥ずかしい...
そこでDB構文の記述を書き換えました。構文にすごく時間をかけました。

dbconnect.php
try{
  $db = new PDO('mysql:dbname=用意しているdbname;host=ホスト名;port=webに表示させたいURL;charset=utf8','dbユーザー名','パスワード');
} catch(PDOException $e){
  print('DB接続エラー:' . $e->getMessage());
}

これでリモートに反映することができました。

知らないことを色々調べて論理付けて学べてよかった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【MySQL】外部キー制約

RESTRICT、CASCADE、SET NULL、NO ACTIONの違い

UPDATE、DELETEした時の結果

UPDATE DELETE
RESTRICT エラー エラー
CASCADE 参照先の変更に追従する 参照先が無くなると同時に削除される
SET NULL NULLに置き換わる NULLに置き換わる
NO ACTION RESTRICTと同様 RESTRICTと同様
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL 関数・句

はじめに

MySQLの「関数」や「句」について、忘れていたので抜粋してまとめています(自分メモ)。

MySQL:Ver 8.0.23

BETWEEN句

【使用例】 ageカラムの値が10以上20以下のデータを取得

SELECT * FROM member WHERE age between 10 AND 20 ;

IN句

複数の一致するかの条件判定をまとめて行うために使用する命令。IN句を使わない場合と比較して、条件文を短く済ませることができる。

ORを使って複数の指定をする場合

SELECT * FROM fruit WHERE name ="apple" OR name ="orange" ;

IN句を使って複数の指定をする場合

SELECT * FROM fruit WHERE name IN('apple','orange');

DISTINCT句

検索するカラム名の重複レコードを一つにまとめて表示する。

SELECT DISTINCT col_name FROM table_name ;

重複するデータを表示しないようにするためにはDISTINCT句を使用する方法とグループ化を使用する方法の2種類がある。

DATE_FORMAT関数

日付を「2021年01月28日」のように表示する。表示の指示をしない場合は「2020-01-28」。

SELECT DATE_FORMTA(日付,変換フォーマット);

【使用例】 memberテーブルの中から、nameとbirthを取得する。birthはフォーマットを変更。

SELECT name, DATE_FORMAT(birth,'%Y年%m月%d日') from members ;

その他の変換フォーマット

  • %Y = 4桁の年(2021)
  • %y = 2桁の年(21)
  • %M = 英語の月名(JULY)
  • %m = 2桁の月(07)
  • %d = 2桁の日付
  • %k = 24時間表記の時間
  • %i = 2桁の分
  • %s = 2桁の秒

IFNULL関数

【使用例】 nameカラムに格納されている値がNULLの場合、NoNameを返す。

SELECT id, IFNULL(name,'NoName') FROM member;

※ カラム名がIFNULL(name,'NoName') となってしまうため、
下記のようにASで名前を戻すのも良い。

SELECT id, INFULL(name,'NoName') AS name FROM member;

COUNT関数

【使用例】 memberテーブルのpointが60以上80未満の人数を合計する。

SELECT COUNT(id) AS 'カウント数' FROM member WHERE point >= 60 AND point < 80 ;

下記のようにアスタリスクでも表示可能だが、データ数が増えるため遅くなる。PK(プライマリーキー)等で示すのがベスト。

SELECT COUNT(*) AS 'カウント数' FROM member WHERE point >= 60 AND point < 80 ;

最後に

次回は結合についてまとめます。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL に ssl 認証で接続

次のファイルがあるフォルダーで実行します。

client-cert.pem
client-key.pem
server-ca.pem

コマンド

ssl_connect.sh
host="example.com"
user="scott"
pass="secret"
#
mysql --ssl-ca=server-ca.pem --ssl-cert=client-cert.pem \
        --ssl-key=client-key.pem \
        --host=${host} --user=${user} --password=${pass}

Python3

show_tables.py
#! /usr/bin/python
#
#   show_tables.py
#
#                       Jan/28/2021
import pymysql.cursors
#
host_aa='example.com' 
user_aa='scott'
pass_aa='secret'
db_aa='dbfirst'
#
connection = pymysql.connect(host=host_aa,
    user=user_aa,
    password=pass_aa,
    db=db_aa,
    charset='utf8',
    cursorclass=pymysql.cursors.DictCursor,
    ssl={'key': './client-key.pem', 'cert': './client-cert.pem', 'ca': './server-ca.pem','check_hostname': False})
cursor = connection.cursor()
cursor.execute("show tables")
result = cursor.fetchall()
# print(result)
for rr in result:
    print(rr)
cursor.close()
connection.close()

Node.js

show_tables.js
#! /usr/bin/node
// ---------------------------------------------------------------
//  show_tables.js
//
//                  Jan/28/2021
//
// ---------------------------------------------------------------
'use strict'

var fs = require("fs")
// ---------------------------------------------------------------
console.error ("*** 開始 ***")

var mysql = require('mysql')

var connection = mysql.createConnection ({
    host: 'example.com',
    user: 'scott',
    password: 'secret',
    database : 'dbfirst',
ssl      : {
        ca   : fs.readFileSync('./server-ca.pem'),
        key  : fs.readFileSync('./client-key.pem'),
        cert : fs.readFileSync('./client-cert.pem'),
  }
    })

connection.query("show tables", function (err, rows)
    {
    if (err) throw err
    console.log (rows.length)

    rows.forEach(function(row)
        {
        console.log(row)
        })


    connection.end()
    console.error ("*** 終了 ***")
    })

// ---------------------------------------------------------------

Go

show_tables.go
// ----------------------------------------------------------------
//
//  show_tables.go
//
//                  Jan/29/2021
//
// ----------------------------------------------------------------
package main

import (
    "crypto/tls"
    "database/sql"
    "fmt"
    "log"
    "os"

    "github.com/go-sql-driver/mysql"
)

func main() {
    fmt.Fprintf (os.Stderr,"*** 開始 ***\n")
    cert, err := tls.LoadX509KeyPair("./client-cert.pem", "./client-key.pem")
    if err != nil {
        log.Fatal(err)
    }
    clientCert := []tls.Certificate{cert}

    mysql.RegisterTLSConfig("custom", &tls.Config{
        Certificates:       clientCert,
        InsecureSkipVerify: true,
    })

    db, err := sql.Open("mysql", "scott:secret@tcp(example.com:3306)/dbfirst?tls=custom")
    if err != nil {
        log.Fatal(err)
    }

    err = db.Ping()
    if err != nil {
        log.Fatal(err)
    }

sql_str := "show tables"
rows, err := db.Query(sql_str)
if err != nil {
        fmt.Println(err)
}
defer rows.Close()

for rows.Next() {
        var name string
    if err := rows.Scan(&name); err != nil {
                fmt.Println(err)
        }
        fmt.Printf ("%s\n",name)
}

if err := rows.Err(); err != nil {
        fmt.Println(err)
        }

    fmt.Fprintf (os.Stderr,"*** 終了 ***\n")
}

// ----------------------------------------------------------------

参考ページ
MySQLでクライアント証明書を使う

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む