Hoembrew を久しぶりに install するときは、uninstall してから install し直すのが正解!

久しぶりに、homebrew をインストールしようとしたら、以下のエラーになった。。。

~ % /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

==> Checking for `sudo` access (which may request your password)...
Password:
==> This script will install:
/opt/homebrew/bin/brew
/opt/homebrew/share/doc/homebrew
/opt/homebrew/share/man/man1/brew.1
/opt/homebrew/share/zsh/site-functions/_brew
/opt/homebrew/etc/bash_completion.d/brew
/opt/homebrew

Press RETURN/ENTER to continue or any other key to abort:
==> /usr/bin/sudo /usr/sbin/chown -R yoshiyod7:admin /opt/homebrew
==> Downloading and installing Homebrew...
HEAD is now at XXX Merge pull request XXXX from Homebrew/dependabot/bundler/Library/Homebrew/unf_extXXX
fatal: couldn't find remote ref refs/heads/master
Error: Fetching /opt/homebrew/Library/Taps/heroku/homebrew-brew failed!
Error: Some taps failed to update!
The following taps can not read their remote branches:
  heroku/brew
This is happening because the remote branch was renamed or deleted.
Reset taps to point to the correct remote branches by running `brew tap --repair`
Failed during: /opt/homebrew/bin/brew update --force --quiet

経緯

  1. composer を install したかった
  2. php がないと言われた。つまり、php をinstall する必要がある
  3. brew install php を実行したが、brew がないと言われた
  4. brew install を実行したら、上記のエラーが出てきた

正解は、uninstall からの install !!!

  • ググったけど、経緯が違うから、解決に至らなかった。。。
  • Chat-GPTに質問したら、uninstall してから、install し直せ!と回答えたところ、Homebrew の install に成功した。

PATHを通す!

  • install が成功したら、最後に、PATHを通す!
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/XXX/.zprofile

% eval "$(/opt/homebrew/bin/brew shellenv)"

感想

過去に、install したものがしばらく経つと機能しなくなるのは、プログラミングあるある。。。

でも、正直めんどくさい。update で解決できるのが、一番ラク

以上!

MAMPを使って、phpMyAdmin というクライアントツールを起動、DB作成までの手順。

こちらのサイトで、SQLの練習をしたいけど、 そもそものSQLを実行する環境構築に手間とりました。

結論としては、

  • MAMPをインストール
  • phpMyAdmin を開く
  • データーベース名:worldcup2014 を作成
  • worldcup2014.sql ファイルをインポート

で完了。

MAMP のインストール方法は、調べたら出てきます。

  • phpMyAdminは、MAMPを起動して画面右上の「WebStart」をクリック。



  • 次に、インポートの前に、データーベース名:worldcup2014 を作成する



  • 最後に、worldcup2014.sql ファイルをインポート

特に、何もせず一番下の「作成」ボタンをクリックすればよい。



以上!

Mac M2:MySQL クライアントツールである、Workbench は、どちらをダウンロードすべき?答え:arm

SQLの学習目的で、DBを触りたいので、クライアントツールをダウンロードしようと思いましたが、どれをダウンロードすべきか悩んでいました。

調べると、MySQL Workbenchがでてきて「あ!これ使ったことあるわ!」と思いダウンロードしようとページに飛びましたが、「え?!どっち??」ってなりました。。。

私は、Macbook Pro 13 を使用していて、M2チップです。 でもどっちかわからず、色々と調べていると、

$ uname -mコマンドが出てきました。

こちらのコマンドをターミナルで打てば、自分のPCが、下の2つのうちどちらかがわかります。

ただし、Rosseta というのを使って、開発や学習をしたことがある人ですと、M2チップでも「x86」が出力されます。

~ % uname -m
x86_64

Rossetta未使用だと以下になります。 もともとM2チップは、armなので、default では以下になります。

~ % uname -m
arm64

以上より、画像でいうところの上の 「ARM, 64-bit」をダウンロードするといいと思います。

mysql workbench

参考サイト:x86_64 か arm64 かをコマンド1つで確認する方法

C# CASEを使って、値を変換して DataGridView 出力する

  • DBから、SQLを使ってデータを取得して、その中のある列の値を条件のもと変換して 出力する方法
  • 条件分岐は、CASE WHEN THEN
SELECT
  表示したい列名,
  表示したい列名
  ( CASE  列名
      WHEN 列名の値 THEN 変換値
      END ) 
  AS 変換値を表示したい列名
FROM
  テーブル名   

研修にて学んだ事:作業の進め方

  • やりたいことを文章化する

    • 頭の中が整理されて、何に疑問を覚えているか客観視できる
    • それにより、何を検索・質問すればよいか明確になっていく
  • SQL文を書くときは、一つの最小限のデータを使って、操作すること。

    • SQL分を使うときは、クライアントツールを使って、SQL文が正しく動作するか確認する

PHP:例外処理 = 404 Not Found の実装

例外処理:アクセス先が、存在しないURLの場合の対応

  • 404 Not Found」を表示させる
  • 実装理由:エラーごとに処理を変えたいから
  • 「Exceptionクラス」は、PHPのエラー(例外)処理の「親」
try {
  // 例外処理:404 Not Found
  if (!$params) {
    throw new HttpNotFoundException();
  }
} catch (HttpNotFoundException) {
  $this->render404Page();
}
catch (HttpNotFoundException) {    --- ①
  $this->render404Page();
}

---
catch() {例外処理} 
---
throw new HttpNotFoundException();
を使えば、「①」が呼び出される。

  • class_exists():クラスが存在するかを判別してくれるメソッド
  • method_exists():メソッドが存在するかを判別してくれるメソッド
    • 使い所:エラーが発生する箇所
    • 動作の根本になる箇所から、エラー元になるものを探す。
      例:URLを振り分ける Router を考えると良いかも。

上記の判別メソッドを使って、404 のエラー(例外)処理を実装する。

例:

1. 存在しないクラスがでてきたら、404を返す
if (!class_exists($controllerClass)) {
   throw new HttpNotFoundException();
}

2. 存在しない関数(メソッド)がでてきたら、404を返す
if (!method_exists($action)) {
   throw new HttpNotFoundException();
}
・よりクレバーな実装
  • throw new HttpNotFoundException();の引数に、エラーごとに異なる文字列を入れといて、
    ログにエラー箇所を吐くようにする実装方法

  • それ以外に、簡易的に実装の際にエラー箇所を明示するなら、以下かが例。

if (!$params) {
   echo $params . 'URLは、存在しません';
   die();
}

if (!class_exists($controllerClass)) {
   echo $controllerClass . 'クラスは、存在しません';
   die();
}

if (!method_exists($action)) {
   echo $action . '関数は、存在しません';
   die();
}

SQL:プレースホルダ、バインド

$mysqli = new mysqli('接続先のMySQLサーバの[ホスト名]or[IPアドレス]', 
'MySQLサーバに接続する時の[ユーザ名]', 'MySQLサーバに接続する時の[パスワード]',
'[接続先のサーバ名]');

$mysqli = new  mysqli('db', 'test_user', 'pass', 'test_database');
  • MySQLに接続するときに使うインスタスの生成を意味する。
    これは、テンプレ。

  • $mysqliという変数にMySQLiオブジェクトが代入されます。
    これにより、接続先のMySQLデータベースに対してクエリの実行やデータの操作などが行えるようになる。

$stmt = $mysqli->prepare('INSERT INTO employees (name) VALUES (?)');
$stmt->bind_param('s', $_POST['name']);
  • prepare()メソッド:実行するクエリを作成する。

    • (?)プレースホルダといい、数学でいう変数。あとで、値が代入されるモノ。
  • bind_param()メソッドプレースホルダに、値を関連づける(バインドする)。

  • 's':ここには、「i:int」「d:float」「s:string」「b:blob」が入る。

    • blob:バイナリデータ(画像、動画、音声、ドキュメントなど)、テキスト以外
  • $_POST['name']:HTMLフォームなどから送信されてきたデータの中で、name="XXX" の XXX の値を指す。そして、これがプレースホルダ「(?)」に関連づけられる(バインドされる)。

  • こうやって、2行に分けて記述するメリットは、

# POST(formに入力)されたデータを保存する
if($_SERVER['REQUEST_METHOD'] === 'POST') {
    // prepare()は、一種のvalidation
    // employeesテーブル の カラム名=name に、値=(?) を入れる
    $stmt = $mysqli->prepare('INSERT INTO employees (name) VALUES (?)');
    // (?)は、's'=string, 文字列の POSTされたname になる。
    $stmt->bind_param('s', $_POST['name']);
    $stmt->execute();
    $stmt->close();
    // employee.phpに、リダイレクトする
    header('Location: /employee.php');
}

参考サイト