スキップしてメイン コンテンツに移動

投稿

PDOで指定したクラスにデータを割り当てて取得する方法

PDOで指定したクラスにデータを割り当てて取得するには、\PDO::FETCH_CLASSをMyPdo::fetch, MyPdo::fetchAllメソッドの引数に指定すれば簡単に実現できます。 通常はPDO::FETCH_ASSOCを指定して、array形式でデータを取得する方が手軽ですが、classでデータを扱うと、下記のメリットがあります。 arrayよりもclassでデータ取得した方がメモリ使用量が少ない arrayよりも、どんなデータを扱っているのかが明確になる それでは、\PDO::FETCH_CLASS使用例を下記に示します。 <?php $sql = <<<EOF SELECT id, name, weight, price FROM table_prodict EOF; $conn = new MyPdo(....); $conn->prepare($sql); $stmt = $conn->execute(); // クラスは第2引数で指定 $stmt->fetchAll(\PDO::FETCH_CLASS, Product::class); Porductクラスは下記を想定しています。 <?php class Product { public $id; public $name; public $weight; public $price; } \PDO::FETCH_CLASSの挙動についての補足です。 クラスを特に指定しないと、取得したカラムに対応したプロパティを持ったstdClassのインスタンスで結果が返ってきます。 指定したクラスに、クエリから取得したカラムに対応したプロパティがない場合(例えば、上記のProductカラムに$priceプロパティがない場合)は、動的にプロパティが定義されて取得したデータがセットされます。 \PDO::FETCH_PROPS_LATEを使うとプロパティにデータをセットする前に、クラスのコンストラクタが呼ばれます。クラスの事前処理が必要な場合に指定すると便利です。 クラスのプロパティ定義がprivateでも正しくデータはセットされます😲
最近の投稿

JetBrains社のIDE上のデータベースツールでSSLのエラーでデータベースに接続できない問題

JetBrainsのIDE内のツールを使ってデータベース(MySQL)に接続しようとしたところ、下記のエラーが出て接続に失敗しました。 Failed Cancel Copy Search Error Troubleshooting [08S01] Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate). 少し調べたところ、JetBrainsのIDE内のJavaを使っている部分のエラーであることがわかりました。根本の原因は、 こちらの記事 に書かれていました。 「接続先ホストからJavaが対応していないTLS(いわゆるSSL)のプロトコルバージョンを要求されたときに出る」ものとのことです。 サーバー側のTLSの設定を変えられない場合、Javaのクライアント側で対応していないTLSのプロトコルバージョンを許可することでこのエラーは回避できます(セキュリティレベルの低いプロトコルを許可することになるので、そのリスクを理解したうえで作業を実施してください)。 C:\Program Files\JetBrains\{JetBrainsのIDE}\jbr\conf\security\java.security 内の下記の記述の部分からTLSv1, TLSv1.1を削除します。 # Note: This property is currently used by the JDK Reference implementation. # It is not guaranteed to be examined and used by other implementations. # # Example: # jdk.tls.disabledAlgorithms=MD5, SSLv3

Symfony 5.xで不要なバンドルを削除する方法

Symfony 5.xで不要なバンドルを削除は下記の手順で実施できます。 config/bundles.phpからバンドルを削除 config/packageディレクトリ内の関連yamlファイルを削除(Kernel.php内で読み込まれている) composer remove vendor/package を実行。 ちなみにバンドルを削除ではなく、ロードしないようにする(無効化する)には、 config/bundles.php内でバンドルを読み込まないようにfalseに設定。 XXXBandle::class => ['all' => false], config/packages/内のyamlを削除 すればOKです。

Windows上でcomposer updateコマンドを実行した場合NoSslExceptionエラー

Windows上でcomposer updateを実行して、 [Composer\Exception\NoSslException] The openssl extension is required for SSL/TLS protection but is not available. If you can not enable the openssl extension, you can disable this error, at your own risk, by setting the 'disable-tls' option to true. というエラーが出た場合、下記の手順に従ってPHPのopenssl extesnionを有効にする必要があります。 PHPがインストールされたフォルダ内のphp.iniファイルを開きます。 extension=php_openssl.dll の含まれている行を探す 行の先頭にあるセミコロン(;)を削除してコメントイン

git rm --cached {ファイル名}:ファイルをGitの管理対象から除外する

Gitから 特定のファイルを管理対象から除外するには、 git rm --cached {ファイル名} とします。 ディレクトリを除外するには、 -r オプションを付けて git rm --cached -r {ディレクトリ名} とします。 --cached オプションを付けないとファイルごと削除されるので注してください。

firebase emulatorへ他のコンピュータから接続させる方法

firebaseのエミュレーターのサービスをネットワーク上の他のコンピュータから接続させる方法を紹介します。 firebase.jsonに "host": "0.0.0.0" の設定を加えます。下記はfunctionsに設定を加えた例です。 "emulators" : { "functions" : { "port" : 5001 , "host" : "0.0.0.0" } , "firestore" : { "port" : 8080 } , "hosting" : { "port" : 5000 } } サーバでは、0.0.0.0は「ローカルマシン上の全てのIPv4アドレス」を意味するので、上記の設定で、firebaseのエミュレータを起動すると、同じネットワークの他のホストからもアクセスできるようになります。 WindowsのFirewallの設定で他のコンピュータから接続させたいポートを開けます。 タスクバーの検索メニューに「Windows Defender Firewall with Advanced Security」と入力してFirewallの設定を開く。 左側のメニューから「Inbound Rules」を選択して、右側のメニューから「New Rule…」を選択して「New Inbound Rule Wizard」を起動。 Rule Type: Portを選択。 Protocol and Ports: TCP, firebaseのエミュレータで開けたいポートを入力 Action: Allow the connectionを選択。 Profile: ネットワーク環境に応じて選択。家や社内のネットワークで利用するだけならば、Privateで十分なはず。 Name: 適当な名前を付ける。

C#でenumに定義された値の一覧を取得する方法

下記のコードでenumに定義された値の一覧を取得できます。 // MyEnumの部分を一覧を取得したいenumに書き換えてください。 var enums = Enum . GetValues ( typeof ( MyEnum ) ) . Cast < MyEnum > ( ) ; // ループしてプリントしてみる。 foreach ( var @ enum in enums ) { Console . WriteLine ( @ enum . ToString ( ) ) ; }

1つのサーバーからGitHubの複数のプロジェクトにSSHの公開鍵を登録

秘密鍵と公開鍵のペアをリポジトリの数だけ作成。 $ ssh-keygen -t rsa -C "repo1" $ ssh-keygen -t rsa -C "repo2" 作成中にファイル名を指定できるので、それぞれの鍵にユニークな名前で作成。例えば下記のようにリポジトリの名前と紐づくように作成。 $ ~/.ssh/repo1_rsa $ ~/.ssh/repo2_rsa ~/.ssh/repo1_rsa,pub , ~/.ssh/repo2_rsa,pub の公開鍵の内容をGitHubのそれぞれのリポジトリの https://github.com/ima-create/{repojitory}/settings/keys で公開鍵を登録。 ~/.ssh/config ファイルに下記のように設定を記述。大事なのはHostの部分で{サブドメイン}.github.comとすること。 Host repo1.github.com HostName github.com User git IdentityFile ~/.ssh/repo1_rsa Host repo2.github.com HostName github.com User git IdentityFile ~/.ssh/repo2_rsa cloneするGitHubのリポジトリのURLに ~/.ssh/config ファイルで設定したサブドメインを含んだを指定すればSSHの認証が通ってクローンできる。 git clone git@repo1.github.com:{name}/{repogitory1}.git git clone git@repo2.github.com:{name}/{repogitory2}.git