- 投稿日:2021-01-28T21:24:04+09:00
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.phptry{ $db = new PDO('mysql:dbname=用意しているdbname;host=ホスト名;port=webに表示させたいURL;charset=utf8','dbユーザー名','パスワード'); } catch(PDOException $e){ print('DB接続エラー:' . $e->getMessage()); }これでリモートに反映することができました。
知らないことを色々調べて論理付けて学べてよかった。
- 投稿日:2021-01-28T18:27:13+09:00
【MySQL】外部キー制約
- 投稿日:2021-01-28T17:59:30+09:00
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 ;最後に
次回は結合についてまとめます。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)
- 投稿日:2021-01-28T16:17:55+09:00
MySQL に ssl 認証で接続
次のファイルがあるフォルダーで実行します。
client-cert.pem client-key.pem server-ca.pemコマンド
ssl_connect.shhost="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でクライアント証明書を使う