20200217のMySQLに関する記事は8件です。

Laravel migrationで文字列型カラムから数値型への変更でハマった解決策

マイグレーションで数値型→文字列型へのカラム変更が必要になり、変更時は問題なかったものの、rollback時に以下のエラーが発生。

 Doctrine\DBAL\Driver\PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1064
 You have an error in your SQL syntax; 
check the manual that corresponds to your MariaDB server version for the right syntax to use near 
'CHARACTER SET utf8mb4 NOT NULL COLLATE `utf8mb4_unicode_ci`, CHANGE fax fax BIGI' at line 1")

原因がわからず困っていたが、よく読むとcharsetが云々書いてあったので、↓で文字列型の時に残っているcahrsetをnullにして解決!

class AddStelToUsersTable extends Migration
{
    /**
     * Run the migrations.
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('s_tel')->nullable()->after('tel');
            $table->string('tel')->change();
            $table->string('fax')->nullable()->change();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('s_tel');
            $table->bigInteger('tel')->charset(null)->change();
            $table->bigInteger('fax')->charset(null)->nullable()->change();
        });
    }
}

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

php + ajax でDBからデータを取得・出力するためのちょっとした話

概要

案件で、2000ぐらいのファイルをそれぞれダウンロードするサイトを制作しました。
クライアントからDB仕様指示はないので、静的htmlで制作することも可でしたが、量が多すぎるのでDBを使用にすることに至りました。
DBを使った案件は初めてで(WPを除く)、PHPもWPのテーマ作成ぐらいしか実戦経験がなかったので、キツかった。。。
振り返りを兼ねての自分メモで。
DBはMySQLでphpMyAdminを使用しています。

仕様

目的:
製品サイト内にて、製品の資料ファイルをダウンロードする。サイト自体は1ページです。
サイトを上下に2分割した際に、上に製品カテゴリのナビがあり、選択したカテゴリのダウンロードリンクを搭載した下にテーブルが表示される。
上で選択したアイテムをパラメータとして渡すことで、下のテーブルをajaxで動的に出力します。

Ajax

「エイジャックス」派です。
基本的な書き方はこんな感じでしょうか。

ajax.js
$(function() {
 $('.btn').on('click', function() {
  $.ajax({
   url: ('path/to/file.php'), // ajax通信をするファイル
   type: 'GET', // GET or POST
   data: { f: $(this).value(); }, // パラメータとして渡す値の指定
   dataType: 'html', // 今回は直接htmlを出力したかったのでhtml。受け取ったデータで更に処理したい場合はjson
   cache: true, // 通信のキャッシュを残すか
   // ajax通信成功
   success: function(data) {
  // 引数でデータを受け取り
    $('#content').html(data);
   },
   // ajax通信失敗
   error: function() {
    console.log('fail');
   }
  });
 });
});

コードの意図としては、ボタンをクリックした際にajax通信を行う。押したボタンbuttonvalueを取得しパラメータfとしてpath/to/file.phpに渡します。
一連の流れが成功すれば、#contenthtmlを出力します。ボタンを押すたびにhtmlを動的に書き換えることができます。
dataの取得方法がよくわからず苦戦しました。他にフォームであれば、inputの値などを指定します。

ちなみにナウい書き方だとこんな感じ

ajax_new.js
$(function() {
 $('.btn').on('click', function() {
  $.ajax({
   // options 略
  }).then(
   function(data) {
    // success
    console.log(data)
   },
   function() {
    // fail 
    console.log('error');
   }
  );
 });
});

PHP

ajax通信時の設定を行う。

connect.php
// DB settings
$host = 'localhost';
$dbname = 'dbname';
$dbusr = 'dbusr';
$dbpass = 'dbpass';

//↑ settingsからDBに接続する
try {
  // 成功
  $dbh = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8mb4", $dbuser, $dbpass);
} catch (PDOException $e) {
  // 失敗
  var_dump('データベース接続失敗' . $e->getMessage());
  exit;
}

// SQL実行準備
$stmt = $dbh->prepare("SELECT * FROM table");
// SQL実行
$stmt->execute();

// 受け取りデータを配列に格納
$dataList = array();

// あらかじめ作成した配列にwhuileで格納する
// FETCH_ASSOCで連想配列化する
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
  $productList[] = array(
   'id' => $row['id'];
   'name' => $row['name'];
  );
}

// XSS対策
function hsc($str){
  return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

// htmlをそのままechoするので以下指定。Content-typeは適宜変更
header('Content-type:text/plain; charset=utf8');

// urlパラメータ「p」のGETが実行されているか
if (isset($_GET['p'])) {
 // パラメータを受け取ったら変数化  
 $format = $_GET['p'];

 // ここでhtml出力します
 echo '通信成功です!';
}

ひとまず完成して動いたので、営業にテストアップ報告を行ったのですが
まだまだわからないことが多い。。。

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

MySQLの文字コードの設定

MySQLの文字コードの確認

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.010 sec)

MySQLの文字コードの変更

変更する際はmy.cnfファイル内に記述する(下記は例)

[mysqld]
character-set-server=utf8

[client]
default-character-set=utf8mb4

設定につきましては下記の参考リンクに詳しく書いているため省略します。
MySQLの文字コードとCollation
MySQLの文字コード事情
MySQL 文字コード確認

データベースの文字コード確認

mysql> show create database [DB_NAME];

データベースの文字コード修正

ALTER DATABASE [DB_NAME] DEFAULT CHARACTER SET [文字コード];

テーブルの文字コード確認

mysql> show create table [TABLE_NAME];

テーブルの文字コード修正

ALTER TABLE testtable CONVERT TO CHARACTER SET [文字コード];

下記参考リンク
[MySQL]mysqlの文字コード確認と変更方法のまとめ

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

【2020年度版】WordPressに入れるべきPlugin(プラグイン)12選

WordPressでWebサイトを構築する際、必ず何らかのPlugin(プラグイン)を導入すると思います。

しかし、以前は便利なPlugin(プラグイン)だったとしても、更新が長期に渡ってされなくなったり、機能面で物足りなくなったりして、入れるべきPlugin(プラグイン)も年々変わります。

そこで、2020年2月段階で入れるべきPlugin(プラグイン)を改めて洗い出してみました。

設定系

設定系のPlugin(プラグイン)は、WordPressの構築時や運用時に必要な各種設定ができるPlugin(プラグイン)です。

WP Multibyte Patch

WP Multibyte Patch

項目名 更新日や有効ダウンロード数
最終更新 3か月前
有効インストール数 1,000,000+
WordPress バージョン 4.5 またはそれ以上
検証済み最新バージョン 5.3.2

WordPress 日本語版パッケージのためのマルチバイト機能の拡張を行うPlugin(プラグイン)です。

Jetpack by WordPress.com

Jetpack by WordPress.com

項目名 更新日や有効ダウンロード数
最終更新 3日前
有効インストール数 5,000,000+
WordPress バージョン 5.2 またはそれ以上
検証済み最新バージョン 5.3.2
PHP バージョン 5.6 またはそれ以上

Jetpack by WordPress.comは、WordPressを提供しているAutomattic社の公式プラグインです。

Google XML Sitemaps

Google XML Sitemaps

項目名 更新日や有効ダウンロード数
最終更新 3か月前
有効インストール数 2,000,000+
WordPress バージョン 3.3 またはそれ以上
検証済み最新バージョン 5.3.2

Google XML Sitemapsは、Google Search ConsoleにWebサイトのxmlサイトマップ登録ができるPlugin(プラグイン)です。

記事作成・表示

記事を作成したり管理する、記事の巡回を促すために便利なPlugin(プラグイン)。

Duplicate Post

Duplicate Post

項目名 更新日や有効ダウンロード数
最終更新 2か月前
有効インストール数 3,000,000+
WordPress バージョン 3.6 またはそれ以上
検証済み最新バージョン 5.3.2
PHP バージョン 5.2.4 またはそれ以上

Duplicate Postは、記事の複製機能が使えるPlugin(プラグイン)です。

WordPress Popular Posts

WordPress Popular Posts

項目名 更新日や有効ダウンロード数
最終更新 2か月前
有効インストール数 300,000+
WordPress バージョン 4.7 またはそれ以上
検証済み最新バージョン 5.3.2
PHP バージョン 5.4 またはそれ以上

WordPress Popular Postsは、閲覧されている人気記事のランキングなどを任意の場所に表示することができるPlugin(プラグイン)です。

Broken Link Checker

Broken Link Checker

項目名 更新日や有効ダウンロード数
最終更新 1週間前
有効インストール数 700,000+
WordPress バージョン 3.2 またはそれ以上
検証済み最新バージョン 5.3.2

このPlugin(プラグイン)は、リンク切れが起こった瞬間にダッシュボードやメールですぐに通知してくれます。

バックアップ

Webサイトのバックアップを取る事は、Webサイトをきちんと運用するための必須項目です。

BackWPup – WordPress Backup Plugin

BackWPup – WordPress Backup Plugin

項目名 更新日や有効ダウンロード数
最終更新 1か月前
有効インストール数 600,000+
WordPress バージョン 3.9 またはそれ以上
検証済み最新バージョン 5.3.2
PHP バージョン 5.6 またはそれ以上

WordPressのバックアップ用Plugin(プラグイン)としては定番。

UpdraftPlus WordPress Backup Plugin

UpdraftPlus WordPress Backup Plugin

項目名 更新日や有効ダウンロード数
最終更新 2か月前
有効インストール数 2,000,000+
WordPress バージョン 3.2 またはそれ以上
検証済み最新バージョン 5.3.2

UpdraftPlus WordPress Backup Pluginは、BackWPup – WordPress Backup Pluginよりも後発のPlugin(プラグイン)ですが、今やBackWPup – WordPress Backup Pluginよりも有効インストール数が多くなったバックアップ用のPlugin(プラグイン)。

フォーム作成

フォーム作成と言えば圧倒的に利用されている数が多いのはContact Form 7ですが、拡張性やカスタマイズを考えるとMW WP Formを私はオススメしたい。

MW WP Form

MW WP Form

項目名 更新日や有効ダウンロード数
最終更新 4か月前
有効インストール数 100,000+
WordPress バージョン 4.0 またはそれ以上
検証済み最新バージョン 5.2.5

入力、確認、完了という日本人が好むフォーム形式に対応したPlugin(プラグイン)。

Contact Form 7

Contact Form 7

項目名 更新日や有効ダウンロード数
最終更新 3か月前
有効インストール数 5,000,000+
WordPress バージョン 4.9 またはそれ以上
検証済み最新バージョン 5.3.2

フォーム作成Plugin(プラグイン)の名作。

高速化

Webサイト表示の高速化は、SEO対策としても重要です。

EWWW Image Optimizer

EWWW Image Optimizer

項目名 更新日や有効ダウンロード数
最終更新 1週間前
有効インストール数 700,000+
WordPress バージョン 5.0 またはそれ以上
検証済み最新バージョン 5.3.2
PHP バージョン 5.6 またはそれ以上

EWWW Image Optimizerは、画像最適化のPlugin(プラグイン)です。

W3 Total Cache

W3 Total Cache

項目名 更新日や有効ダウンロード数
最終更新 3日前
有効インストール数 1,000,000+
WordPress バージョン 3.2 またはそれ以上
検証済み最新バージョン 5.3.2

W3 Total Cacheは、高速化の為にサーバ側、ブラウザ側でさまざまなキャッシュの設定をする事が出来るPlugin(プラグイン)です。

必要なものだけを導入する

Plugin(プラグイン)は大変便利なものですが、WordPressのコアと同じくセキュリティの脆弱性に対応するためにはアップデートを常に行う必要があります。

また、Plugin(プラグイン)を入れすぎるとWordPressが重たくなるケースもありますので、Plugin(プラグイン)は必要最小限のものだけを入れるようにしましょう。

詳細元記事:【2020年度版】WordPressに入れるべきPlugin(プラグイン)12選

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

Windows10にMySQLをインストールする方法

  • 環境
    • Windows10 Pro 64bit バージョン1903

1. MySQLのインストーラをダウンロードする

  1. MySQLのサイトへアクセスする
  2. [MySQL Downloads »]を押下する
    • キャプチャ.PNG
  3. [MySQL Installer for Windows]を押下する
  4. OSを選択して[Download]ボタン > [No thanks, just start my download.]を押下する
    • 今回はmysql-installer-web-community-8.0.19.0.msiを選択。
    • image.png
    • image.png

MySQLのインストーラには、Web経由でダウンロードしながらインストールするインストーラ(上)とインターネットが繋がっていなくてもインストールできるインストーラ(下)があります。
MySQLのダウンロードとインストール - Windows環境 - MySQL入門 - Webkaru

2. インストーラでインストールする

  1. ダウンロードしたmysql-installer-xxx.msiをダブルクリックして起動する
  2. image.png
  3. [Choosing a Setup Type]画面で「Server only」を選択して[Next]ボタンで次へ進む
    • MySQL Workbench(クライアントツール)などが必要であれば「Developer Default」などを選択する
    • image.png
  4. [Install Directory]と[Data Directory]を入力して[Next]ボタンで次へ進む
    • 「Developer Default」などを選択して[Install Directory]を指定する箇所がない場合は、C:\Program Files\MySQLにインストールされた
  5. [Execute]ボタンでインストールし、[Next]ボタンで次へ進む
  6. [Product Configuration]画面の[Next]ボタンで設定へ進む
    • image.png

3. 初期設定をする

  1. image.png
  2. [Type and Networking]も[Next]ボタンで進む
    • 他にインストールしているMySQLなどでポートが重複する場合は変更する
  3. rootユーザのパスワードを設定して[Next]ボタンで進む
  4. MySQLをWindowsのサービスに追加して、起動時にMySQLが立ち上がるように設定する
    • image.png
  5. [Apply Configuration]画面の[Execute]ボタンで設定を反映して[Finish] > [Next] > [Finish]で完了
    1. image.png
    2. image.png
  6. 「Developer Default」などを選択した場合は[MySQL Router]や[Samples and Examples]の設定を続けて行う
    1. image.png
    2. image.png
    3. image.png

4. MySQLがサービスに登録されたことを確認する

  1. Win + R > services.mscでサービスダイアログを表示する
  2. [名前]列の値でMySQLxxがあることを確認する
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQLの予約語こわい問題

朝からなんでかSQLとおらないなあ・・・

  • とあるサービスのデータベースがMySQLなのですが、開発環境を作ろうと調子にのってMySQLのバージョンを上げました
  • すると普通のSQLが通りません
select * from member;

小一時間ほど悩んだ挙げ句、気がついた

select * from `member`;

あの時間を返してくれ・・・

  • ということで、バージョンアップはうかつにしないように・・・。
  • バージョンでいったり来たりもやめてほしい
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【MySQL】Windows7にインストールしてみる

PostgreSQLは既に利用しているのですが、MySQLも利用してみたいと思ったので、インストールしてみようと思いました。

MySQLのインストール方法

インストーラーをダウンロード

公式のダウンロードページからダウンロードします。
ページの下部に有るMySQL Community (GPL) Downloads »を選択してください。
MySQL Community Serverを選択してください。

下記の画像部分をクリックしてください。
image.png
mysql-installer-community-8.0.19.0.msiをダウンロードしてください。

インストーラーでの操作

ダウンロードしたインストーラーを起動してください。

Choosing a Setup Type

通常はDeveloper Defaultを選択し、インストールすればいいのですが、今回は、Customを選択してみました。
image.png

Select Products and Features

今回は下記のツールを選択しました。
image.png

パスの変更

下記の設定を選択し、インストールするパスを変更します。
image.png

Installation

Executeボタンを押下します。
image.png
完了したら、次に進みます。

Product Configuration

次へをクリックします。
image.png

MySQL Serverの設定

設定に関する公式のドキュメントはこちら

High Availability

今回、高可用性は不要なので、デフォルトのStandalone MySQL Server / Classic MySQL Replicationを選択しました。

Type and Networking

デフォルトの設定を使用します。

Authentication Method

デフォルトの設定を使用します。

Accounts and Roles

MySQL Root Passwordを設定します。
必要であればUserアカウントを登録してください。

Windows Service

デフォルトの設定にします。

Apply Configuration

Executeボタンを押下します。
設定が終了したら、Finishを押します。

MySQL Routerの設定

設定に関する公式のドキュメントはこちら

MySQL Router Configuration

今回は、Inno DBを利用していないので、チェックをつけずにFinishをクリックします。

Installation Complete

Finishをクリックします。

PATHの設定を行う

コマンドプロンプトで利用できるようにするために環境変数を設定します。

パスを探す

インストールしたMySQL\MySQL Server 8.0\binのパスを探します。

環境変数に設定

スタートメニューを押してenvと検索し、環境変数を設定する。

ユーザー環境変数の部分のpathを選択し、編集をクリックする

「変数値」の内容に;D:\MySQL\MySQL Server 8.0\bin(先ほど探したパス)を追加します。
パスの区切り文字は;なので忘れずに付加してください。

動作の確認

スタートメニューでcmdと検索し、コマンドプロンプトを開きます。
下記のコマンドを実行し、結果が得られたら、正常に動作しています。
mysql --version

参考にしたページ

Windows 版 MySQL インストール手順

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

【Rails】AWS Cloud9で環境構築

コマンド関係

AWSのアカウントがある前提

  • IAMユーザーでログインし、コンソール画面からcloud9を検索

  • 「Create environment」をクリック
    Image from Gyazo

bundlerを入れる

$ gem install bundler

バージョン確認

$ bundle -v

rails newで開始

$ rails new . -d mysql --skip-turbolinks --skip-test --skip-coffee

こんなエラーが出て少しハマる・・・

$ bundele install

# 略

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

→以下のコマンドを打つと解決

$ sudo yum install -y mysql-devel

gemのインストール

$ bundle install --path vendor/bundle

サーバー起動

$ bundle exec rails s

cloud9でmysqlを走らせる(起動)

$ sudo service mysqld start

→ローカルで使うときの$ mysql.server startと同じ意味。

DBの作成

$ bundle exec rails db:create

Image from Gyazo

補足:

AWS Cloud9 には、あらかじめイントールされている MySQL がある

以下のコマンドを入力して、MySQL がイントールされているか確認

$ mysql --version

参考にしたURL

初めてのAWS Cloud9導入 - Qiita

AWS Cloud9でRuby on Railsを始める | RemoNote

AWS Cloud9でRailsプロジェクト作成直後にぶつかる問題の対応方法 - Qiita

AWS Cloud9でMySQLを利用する方法 - Qiita

Railsでmysql2をインストールするときにハマったところ - Qiita

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