ubuntu18 mysql5.7 root password 設定

mysql5.7あたりからpasswordというフィールドは無くなっている

mysql> SELECT User , authentication_string FROM mysql.user
mysql> UPDATE user SET authentication_string=password('大文字と記号を含むパスワード') WHERE user='root';
mysql> flush privileges;
mysql> \q

# mysql-uroot -p

ちなみに ubuntuでrootユーザーでログインするとパスワードも聞かれずにログインできてしまう
$mysql -uroot -p
一般ユーザーならちゃんと聞かれる

mysql create table 索引のインデックスが長すぎます

Specified key was too long; max key length is 767 bytes


	mail varchar(255) NOT NULL,
	 kibobi date NOT NULL,
  	KEY kibobi (kibobi(191)),
   UNIQUE KEY mail (mail(191))

とか長さを指定すればOK

日本語エンコードがutf8の場合はバイト数が少ないのでエラーは出ないが
utf8mb4にすると大きくなるので警告が出るようになった。

bindValueでループしてSQL文作成

  $sql = 'DELETE FROM tablename WHERE ';
  $j=count($_POST['chk']);
    for ($i=0; $i < $j; $i++) { if ($i === 0 ) { $sql .= ' id=? '; }else{ $sql .= ' OR id=? '; } } $sth = $dbh -> prepare($sql);
  
    $i=1;
    foreach ($_POST['chk'] as $chk) {
      $id = (int)$chk;
      $sth -> bindValue($i, $id, PDO::PARAM_INT);
      $i++;
    }
   
    $sth -> execute(); 
 

SQLのexecute()をループの中に書くべきではない。
複数のバインドを行ってから一回のexecuteを実行するべき

 


INSERTの場合

$colum_name = array("sei","mei","sei_kn","mei_kn","ybn","pref","city","addr","tel","mail");
$key_array = array('姓','名','セイ','メイ','〒','都道府県','市町村','以降の住所','TEL','メール');
$cname='';$cvalues='';
foreach ($colum_name as $v) {
$cname .= $v .',';
$cvalues .= ':' . $v .',' ;
}
$cname= rtrim($cname,',') ;
$cvalues = rtrim($cvalues,',');
//$sql="INSERT INTO kokyak( $cname ) VALUES (?,?,?,?,?,?,?,?,?,?) ";
$sql="INSERT INTO kokyak( $cname ) VALUES ( $cvalues ) ";
echo $sql .PHP_EOL;
$sth = $dbh->prepare($sql);
$dbh->beginTransaction();//トランザクション処理を開始 
try {
// bindValueは値をバインドします。
// bindParamは変数をバインドします。評価は実行時です。
foreach ($colum_name as $k => $v) {
$sth->bindValue(":$v", "{$post_hash[$key_array[$k]]}", PDO::PARAM_STR);

}
$sth->execute();

MySQL rootのパスワードを忘れてしまった場合の対処方法

Dosプロンプトでディレクトリを変更

MySQLのrootのパスワードを忘れてしまった場合でも、以下の
対処をすることでパスワードの変更を行うことが出来ます。

(1)MySQLサービスの停止
●Windows
「コントロールパネル」→「管理コンソール」→「サービス」の画面を起動して、
「MySQL」サービスを停止してください。
●LINUX
以下のコマンドを実行して、デーモンを停止してください。
#/etc/init.d/mysql stop

(2)パスワード無しでログイン出来るようにMySQLを起動
●Windows
コマンドプロンプトを起動して以下のコマンドを実行してください。
mysqld-nt –skip-grant-tables
※応答待ちで止まりますが、そのままで問題ありません。

●LINUX
以下のコマンドを実行して、MySQLを起動してください。
#mysqld_safe –skip-grant-tables

(3)MySQLに接続して、パスワード変更
●Windows、LINUX共通
コマンドプロンプトをもう1つ起動させ、以下のコマンドでMySQLに接続、
及びパスワード変更コマンドを実行してください。
以下の画面はWindowsの物ですが、Linuxの場合も同じコマンドで変更できます。
なお、下記では新しいパスワードを「pass」で設定しています。
C:\Users\sasuke>mysql -u root mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.86-community-nt MySQL Community Edition (GPL)

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>update user set password=PASSWORD(‘pass’) where user=’root’ and host=’localhost’;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql>FLUSH PRIVILEGES;

(4)パソコンの再起動
パソコンの再起動、又はmysqlのプロセスを停止後にMySQLのサービスを起動しましょう。
上記で設定した新しいパスワードでログイン出来るようになります。

参考
http://sasuke.main.jp/mysqlrootpass.html

Amazon在庫 出品管理

amazonで無在庫販売を行うためのツールです。
国内のamazonと海外のamazonから取得したデータを取り込んで、 送料や手数料・利益率などを含んだ売価を計算します。
データ件数は数万件に対応しています、為替レートや利益率の調整、安すぎる売価の一括調整 と出品データの書出しができます。

このシステムにはamazonから商品データを取得する機能はありませんが、オプションで 設置することも可能です。
Amazon在庫 出品管理ツール

myslq 年齢計算 関数 文字連結

年月日が別々に記録されているフィールドをゼロづめにして、
連結して、
日付にキャストして、
今日の日付から引き算して、
年齢にする方法

SELECT
(YEAR(CURDATE()) - k.bthY) - (RIGHT(CURDATE(), 5) < RIGHT(cast(concat(k.bthY,lpad(k.bthM,2,'0'),lpad(k.bthD,2,'0')) as date), 5)) as '年齢'
FLOM table

SQLでリストどうしを比較

あるリストにないデータで別のリストにあるデータを絞込

SELECT uri.* FROM `tableA` 
          LEFT JOIN teate
          on `A_id` = `B_id` 
          AND `A_tstp` = `B_tstp`
          where 
          NOT EXISTS(
              select * from tableB 
              where `A_id` = `B_id` 
              AND `A_tstp`=`B_tstp`
              )

あるリストにあるデータを別のリストにあるデータで絞込

  NOT がいらなくなる

 

一回のクエリで値の有無を探して、あれば見出し行も書き出し、無ければないで

検索した結果、戻り値がないなら[ありませんでした]
あったら、内容を返す。

これを一回のクエリで実行したい。

$strsql=“SELECT なんだ*, かんだ
FROM このテーブル
LEFT JOIN あのテーブル
ON このカラム = あのカラム
where なじょうけん ;

$sth=$dbh -> query($sql);  //ふつうにクエリ実行

$result = $sth->fetchAll(); //一度フェッチする

$array_size= count($result); //なければ 0がかえってくる

foreach ($result as $key => $value) {  //こいつを回す。
if($key==0){   // ループの一回目は普通ゼロ
foreach ($value  as $k => $v) {
$csvth[]= $k ;  //連想配列なのでキーを取り出して配列化
}
fputcsv($fp, $csvth);  //配列をCSVに
}
fputcsv($fp, $value);  //ここからは値行を一行目から
}

フェッチしないで$sthにさわるとポインタが送られてしまうので全部取り出せなくなる。

日付フォーマットをハイフン区切りに

datetimepicekrで入れた日付がMySqlに入らない。

→datetimepicekr.jsを開いて直接編集パターン

142  format:            'Y-m-d',
204  id:'ここに独自ID',
205  roundTime:'round', // ceil, floor
206  className:'独自クラス',

→PHPで直すパターン
datetimepicker timestampと同じ型にすれば入るだろう。

2015/02/28 17:20:00 → 2015-02-28 17:20:00

date( “Y-m-d H:i:s”,strtotime( $_POST[“dhms”] ))

これでスッキリ解決。

SQL文 LOAD DATA INFILEまとめ

行数の多いテキストファイルを超高速でテーブルに取り込むSQL文。

数万件合ってもコンマ数秒で取り込むので使わないわけにはいかない。INSERTではとてもやってられない。

ハマり所1
読み込むファイルのパーミッションとディレクトリのパーミッション= ともに755にしておく

ハマりの2
LOAD DATA [ local ] INFILE “data.txt” INTO TABLE テーブル名;
このパラメータlocalはMySqlユーザーにFILE権限なしでも実行可能にするものなので、入れておくべき。

ハマりの3
改行記号は  LINES TERMINATED BY ‘\n’;  と紹介しているところが多いが、 “\n”としないと一行しか入らなかった。

ハマりの4
コンソールから実行すると上手くいくが、PDOだとエラーになる。
$dbh = new PDO($db,$user,$password,array(PDO::MYSQL_ATTR_LOCAL_INFILE => true));
array(・・)を追加したら取り込めた。

MySQL 既存テーブルにCSVをインポート

そのままインポートすると別の新規テーブルができてしまう。

  1. とりあえず カレントのディレクトリがここらしいのでファイルをコピーする→ /var/lib/mysql/mws/tmp/
  2. ファイルのパーミッションは755でいいらしい。tmpのパーミッションも755にしておく
  3. テーブルまで選択してSQL文
    LOAD DATA INFILE “tmp/data.csv”
    INTO TABLE t_us FIELDS TERMINATED BY “,”
    LINES TERMINATED BY “\r”
    IGNORE 1 LINES;
  4. 改行文字のrと先頭の1行がフィールド名なので入れない→IGNORE
    改行文字を間違えるとデータは1行しか入らない。

phpMyAdminアップデート

#cd /usr/share/  ここに移動

# mv phpmyadmin/ _phpmyadmin/  名前を変えてバックアップ

# cd /home/usr/ユーザ名 ここにダウンロードするのでカレントを移動

# wget http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.2.12/phpMyAdmin-4.2.12-all-languages.tar.gz

# tar phpMyAdmin-4.2.12-all-languages.tar.gz    解凍

# mv phpMyAdmin-4.2.12-all-languages/ phpMyaAdmin/    ディレクトリ名変更

# chmod 660 /home/ユーザ名/phpMyAdmin/config.inc.php
# cp -r /home/ユーザ名/phpMyAdmin/ /usr/share/phpMyAdmin/
ディレクトリごとコピー
# cp /usr/share/_phpMyAdmin/config.inc.php /usr/share/phpMyAdmin/config.inc.php
以前の設定ファイルをコピー
# chown -R root.apache /usr/share/phpMyAdmin/
オーナー変更して完了