20200404のMySQLに関する記事は7件です。

MySQLエラー

https://gyazo.com/f195fd0a8fbb6c3d52e4fb46746af2f8
priceのカラムがない
追加して解決

ローカル環境
作業中のディレクトリ
カラム追加
rails g migration Addカラム名To追加元テーブル名 追加するカラム名:型
rails g migration AddNicknameToUsers nickname:string
rails db:migrate

カラム削除
例:rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:型
rails g migration RemoveNameFromTweets name:string
rails db:migrate

本番環境
作業中のディレクトリ
mysql -u root                        起動
SHOW DATABASES;                     データベース参照
USE データベース名;                     データベースに移動
SHOW TABLES;                      テーブル参照
ALTER TABLE テーブル名 ADD カラム名 カラムの型;      カラム追加
ALTER TABLE テーブル名 DROP カラム名;           カラム削除

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

【PHPメモ】(恐竜)プルダウンを生成する関数

1.はじめに

DBのSELECT結果でプルダウンを作成するコードを記述するのが面倒だ。
htmlタグの間にPHPを埋め込む、インデントがややこしい。
さらにコードの量が増えていく。
下記の画像は前に作った改良恐竜登録ツール(PHP+MYSQL版)の一部。
このハイブリッド選択のコードが結構、ぐちゃぐちゃになっていた。

select_dino_mysql2.jpg

生成元タイプ1、生成元タイプ2はセレクト状態を維持するプルダウン、
生成元恐竜1と生成元恐竜2は、生成元タイプで選択した項目により変化するプルダウン。
上記のプルダウンを生成する関数を作って、共通プログラム(common_dino2.php)に置けば、効率的に開発が
進められるのではないか(開発とは言えないけど)
勉強もかねて作ってみた。

2.選択状態を維持するプルダウンを生成する関数

common_dino2.php
  //$name_pulldown_type:プルダウンのname、$str_query0:SQL、$select_type0:プルダウンで選択されたタイプ
  function Make_pulldown_selectedType($db0,$name_pulldown_type,$str_query0,$select_type0)
  {
    $result_a=$db0->prepare($str_query0);
    $result_a->execute();
    echo "<select name=\"$name_pulldown_type\" style=\"width: 100px\">";

    while($data0=$result_a->fetch(PDO::FETCH_ASSOC)){
      //$select_type0が$data0['type0']と等しい場合
      if($select_type0 == $data0['type0']){ 
        echo "<option selected>".$data0['type0']."</option>";
      //$select_type0が$data0['type0']と等しくない場合
      }else{
        echo "<option>".$data0['type0']."</option>";
      }
    }  
    echo "</select><br>";
  }

3.生成元タイプで選択した項目により変化するプルダウン

common_dino2.php
  //$name_pulldown:プルダウンのname、$str_query0:SQL、$val1:str_query0のプレースホルダ
  function Make_pulldownDname($db0,$name_pulldown,$str_query0,$val1)
  {
    $result_a=$db0->prepare($str_query0);
    $result_a->bindparam(1,$val1);
    $result_a->execute();
    echo "<select name=\"$name_pulldown\" style=\"width: 280px\">";
    while($data0=$result_a->fetch(PDO::FETCH_ASSOC)){
      echo "<option>".$data0['dname0']."</option>";
    }
    echo "</select><br>";
  }

4.呼び出し元コード例

select_dinotype3.php
//色々省略
<?php 
}else{
  echo "<h1>ハイブリッド選択</h1>";
  require "common_dino2.php";

  $dbname="db_dino";
  $dbh= NewPdo($dbname);
  $query_type0 = "SELECT DISTINCT type0 from tbl_dino Where type0 != 'unique'";
 ?>
  <?php 
  $stype1=isset($_POST['dtype01'])?htmlspecialchars($_POST['dtype01']):null;
  $stype2=isset($_POST['dtype02'])?htmlspecialchars($_POST['dtype02']):null;
   ?> 

  <form action="select_dinotype3_mysql.php" method="post">
生成元タイプ1:

  <?php Make_pulldown_selectedType($dbh,"dtype01",$query_type0,$stype1); ?>

生成元タイプ2:
  <?php Make_pulldown_selectedType($dbh,"dtype02",$query_type0,$stype2); ?>

  <input type="submit" value="タイプ確定">
  </form>

<?php 
  $dbname="db_dino";
  $dbh= NewPdo($dbname);

  $query_select_type0 = "SELECT dname0 from tbl_dino where type0 = ?";
 ?>

  <form action="hibrid_dino2_mysql.php" method="post">

生成元恐竜1:
  <?php 
    Make_pulldownDname($dbh,"dname1",$query_select_type0,$stype1);
   ?>   
生成元恐竜2:
  <?php 
    Make_pulldownDname($dbh,"dname2",$query_select_type0,$stype2);
   ?>   
//色々な処理

5.結果

(1).ハイブリッド選択時の画面

pulldown_beforeselect_img.jpg

(2).ハイブリッド選択時の画面のソース

pulldown_beforeselect.jpg

(3).生成元1タイプと生成元2タイプを選択時の画面

pulldown_afterselect_img.jpg

(4).生成元1タイプと生成元2タイプを選択時のソース

pulldown_afterselect.jpg

赤枠で選択されたタイプが、青枠では赤枠で選択されたタイプに属する恐竜名が表示されている。

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

LibreOffice で MySQL連動 PDF帳票を作る

LibreOfficeを使い、データベース連動してPDF帳票を作るシステムを作ってみます。

Draw で領収書を作る

誰も使っていない LibreOffice Draw 。
image.png

これを使います。

Drawだと好きな位置に好きな体裁で「領収書」と書ける。
ネ申エクセルよりもずっと直感的。

image.png

以下に述べる手法は、Writer でも Calc でもできる。けれども人類は Draw の可能性に気づくべき。

注意

センタリングや右揃えの必要な書式は、図形描画で透明&透明枠の四角を作り、その中にテキストを配置します。

自動で日付を入れる

先のものの日付を ##TODAY## としておきます。

キーワードを ## に挟み込む形にしました。

image.png

##TODAY##

として、## で囲んだキーワードを置き換えることにします。

なぜ ## を使うのか

なぜ %% とかではなく、 ## を使うか? 20年ほど前から似たようなものを作ってましたが、その当時の SJIS や EUC などの文字コードでは %% だと誤動作することがあったからです。
今では UTF-8 が前提となり、## でなくても十分動作すると思いますが以前の流儀で ## としています。

操作

作業フォルダを決めて、odgファイルをそこに保存します。
そのフォルダ上で作業をします。

まずは、odgファイルから、content.xmlを抽出し、名前を original.xml と変更します。

$ unzip test1.odg content.xml
$ mv content.xml original.xml

加工しやすくするためにxmllint をかけ、sed でキーワードを変更します。

$ xmllint --format  original.xml | sed s/##TODAY##/"`date +%Y年%-m月%-d日`"/g  > content.xml     

ちなみに、2020/04/04 みたいにするには以下の通り

$ xmllint --format  original.xml | sed s/##TODAY##/"`date +%Y年\\\/%m\\\/%d`"/g  > content.xml     

できた content.xml を odgファイルに収容する。

$ zip test1.odg content.xml


pdf変換

$ soffice --headless --convert-to pdf test1.odg

image.png

データベースと連動する

mysqlに入っているデータを引っ張ってくるようにしてみます。

image.png

$ sudo pip3 install mysql-connector-python3

として、以下の db.py を作っておく。

import sys
import mysql.connector
import re
global キー
global キーフィールド

キー=sys.argv[2]
キーフィールド="会員番号"


def dbload(キー,テーブル,フィールド):
  db=mysql.connector.connect(host="127.0.0.1", user="webdb", password="password")
  cursor=db.cursor()

  cursor.execute("USE test")
  db.commit()
  sql=('SELECT '+フィールド+' FROM '+テーブル+' where 会員番号="'+キー+'"')
  cursor.execute(sql)
  i=(cursor.fetchone())
  cursor.close()
  db.close()
  return(i[0])

def replaceline(source):
  p = re.search(r'##SQL:(.+)@(.+)##',source)
  if p != None:
    テーブル=(p.groups()[1])
    フィールド=(p.groups()[0])
#    print(テーブル)
#    print(フィールド)
    ret = dbload(キー,テーブル,フィールド)
    p = re.sub(r'##SQL:(.+)@(.+)##',ret,source)
    return(p)
  else:
    return(source)

#source = '  ##SQL:会員@フリガナ## 様'
#dist=replaceline(source)
#print(dist)

filename = sys.argv[1]
with open(filename, 'r') as f:
    fileText = f.read()
    replacedtext = replaceline(fileText)
    print(replacedtext)

あとは、同じように

$ unzip test1.odg content.xml
$ xmllint --format content.xml > original_xml
$ python3 db.py original_xmllint.xml 4 | sed s/##TODAY##/"`date +%Y年%-m月%-d日`"/g  > content.xml   
$ zip test1.odg content.xml
updating: content.xml (deflated 85%)
$ soffice --headless --convert-to pdf test1.odg

とすると pdf ファイルができる。

image.png

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

mysqlでパスワードを変更したい時

変更対象のユーザーはrootとする

1. mysqlにログインして変更するパターン

mysql> update mysql.user set password=password('新しいパスワード') where user = 'root';

# 更新して一度ログアウト
mysql> flush privileges;
mysql> exit;

# mysql -u root -p
Enter password:

これで設定した新パスワードでmysqlにログイン可能

参考リンク

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

MySQLでcsvファイルをテーブルにインポートする

ログイン時、オプションを指定

mysql -u root -p --local-infile=1

データベースを選択

use hogedb

インポートするコマンド

LOAD DATA LOCAL INFILE './huga.csv' --インポートしたいcsvファイル
INTO TABLE hogetable --インポートするテーブル
FIELDS TERMINATED BY '\t' --インポートしたいcsvの区切り文字
LINES TERMINATED BY '\n'; --csvの行区切り指定

おまけ

インポート前に、格納済みのデータをクリアしたいときは

TRUNCATE TABLE hogetable;

別テーブルからデータを移行したいとき

insert into new_table (
 column1,
 column2,
 column3)
select
 column1,
 column2,
 column3,
from
 old_table;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」に苦しんだ

エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」
で非常に苦しみました。
改善したので、メモしておきます。

Rails sはできるが、どこかページを読み込もうとしようと、エラーが発生します。

改善の参考になった記事は、下記になります
エラー「...mysql2/client.rb:90: [BUG] Segmentation fault at 0x00000000000000」(セグフォ/セグメンテーション違反)に対応した
これでmysqlをアンインストールします。

mysqlの再インストール方法は、自分の環境構築方法である
VS codeの初期設定とRuby on Railsの環境設定のMysqlの構築をしました。

しかし、
エラー「Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.21.dylib (LoadError)」が表示されました

この対応方法は下記のサイトが有効でした
https://note.com/shoki_rails/n/nf7b51ba48084

$ bundle exec gem uninstall mysql2
> 3ですべてのバージョンを削除する
$ bundle install
$ rails s
>改善
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ActiveRecord::NoDatabaseError: Unknown database 'アプリ名_development' 解決策

RMVC設定中にrails db:migrate出来ない

localhost:3000 に'アイウエオ'と表示させたい為
rails new後にターミナルとVSCodeでRMVC設定を行う。
rails db:migrate コマンドを打ち込んだ後に以下のエラーが発生。

・ActiveRecord::NoDatabaseError: Unknown database 'アプリ名development'
・Mysql2::Error: Unknown database 'アプリ名
development'

databaseがないですよというエラーでした。

databaseがないのなら作ればいいのではと思い、ターミナルで以下のコマンドを打ち込む。

rails db:create

Created database 'アプリ名development'
Created database 'アプリ名
test'     

上記の様に表示されればdatabaseが出来たはずなので改めて

rails db:migrate

これで無事migrateできました。

参考記事(重要)

rake or rails コマンドでdbを扱うときのメモ
https://qiita.com/pugiemonn/items/e237b73025d8db8545bf

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