投稿

PHP の PDO で debugDumpParams の出力をファイルなどに保存

SQL の実行結果を確認しようにも bindValue や bindParam を使っていると、実行内容を取得できない debugDumpParams を利用すると SQL へ渡った情報を標準出力に吐き出すことが出来る その内容をファイルなどに保存する $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {          $stmt -> debugDumpParams ();     } finally {          // ob_end_flush();          ob_end_clean (); // callback からの戻り値を出力しない     } } function callback ( $buffer ){      file_put_contents ( 'sqlresult.txt' , $buffer );      return $buffer ; } 通常は execute() の直後に debugDumpParams() を呼び出せば、標準出力に吐き出されますが ob_start(関数名) で、内容をコールバック関数へ渡しています。今回は 標準出力へ表示する必要が無いので、ob_end_clean() を用いていますが、callback の戻り値を出力する場合は ob_end_flush() を利用します。 $stmt -> execute (); if ( ob_start ( 'callback' ) ){      try {        ...

PHP の call_user_func_array + bind_param で参照渡し

call_user_func_array で mysqli の bind_param を呼び出しをまとめつつ、汎用性をもたせたい bind_param は 第2引き数以降が参照渡しでなければならないので、渡す配列を作成する段階で参照渡しを入れておく必要があるが、毎回面倒なので配列を再生成することで落ち着く // 警告が出るパターン // Warning: Parameter 2 to mysqli_stmt::bind_param() expected to be a reference, value given in $params = array ( 'i' , 2 ); call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); // 引き数を意識するパターン $id = 2 ; $params = array (); $params [] = 'i' ; $params [] = & $id ; // パラメータは参照渡し call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); // お手軽なパターン $params = array ( 'i' , 2 ); for ( $i = 1 ; $i < count ( $params ); $i ++){ // 2番目以降を参照渡しに書き換え      $params [ $i ] = & $params [ $i ]; } call_user_func_array ( array ( $stmt , 'bind_param' ), $params ); ここで $params を作成する時に foreach($data as $key => $value){ $params[] = &$value } の様に行ってはいけません 上記は $value 参照を代入することになり、次のループで $value が書き換えられ、結果的に配列の最後の値を全てが参照することになります for...

Nintendo Switch を Amazon から3時間くらいで購入したメモ

イメージ
Nintendo Switch を転売屋の餌食にならず Amazon から3時間くらいで購入したメモ ただし、サンタさんの手柄 転売屋対策なのか Amazonでは switch 本体のみよりも、ポーチやダウンロード版との組み合わせの方が、入荷が多いような気がします ポーチやマリオオデッセイ等、いずれ購入する予定があれば、それらの抱合せ商品を狙うと、より容易に購入できると思われます ちなみに、switch本体に30GB程度のメモリ空き領域があるので、いくつかのダウンロード版を利用するのであれば SDカードは無くても利用可能です 下準備 スマホに Twitter アプリを入れて、通知の設定をする Twitter の switch販売速報bot 等をフォローして、モバイル通知をオンにする Amazonで switchの商品構成と価格をチェック Amazon で 1-Click注文 を有効 にする 購入編 購入したい商品のページを開いておく(候補が複数あればそれらも) スマホの Twitter アプリでプッシュ通知がくる 【重要】ここで、商品が何かをTwitter画面で確認するのは時間の無駄です 購入したい商品のページをリロード、 金額とAmazonが販売 していることを確認 1-Click注文 → NG or 注文完了 あとは、2~4 を繰り返す 本体の商品構成 本体のみ 本体 + ポーチ等 本体 + ソフト

Firefox 57 Quantum アップデート開始

イメージ
新Firefox Quantum 登場 旧形式のアドオンは利用不能(代替えを探す機能あり) メモリ使用量は、そんなに減ってない(と思う) 進む・戻る がもたつく スクリーンショット機能を標準で搭載 Firefox Sync は継続利用可能 Shockwave Flash はプラグインに残っている 先日、久々にOpera(blink)を試してみましたが、昔のサクサク感がまったくなくて非常に残念だったので、Quantumには頑張って欲しいところです レンダリング速度と体感速度は違うって事を Operaは知っていたはずだけど...

Python ディクショナリの keys や values の順序

Python のディクショナリを keys() や values() で独立して読み取った場合、取得される順序が同じかどうか 「python keys values same order」というキーワードで質問が散見され、各バージョン( 2系 , 3系 )共にその間ディクショナリに手が加えられなければ、オーダーが保持されるだそうです SQL の INSERT 文なんかに便利に使えたりする ちなみに、配列をカンマ区切りの文字列で返すには下記のようにすると簡単です s = ', ' .join(data.keys())

Python コメント coding:utf-8 の記述位置

Python + apache で UTF8の情報を扱っていたら SyntaxError: Non-ASCII character のエラーが多発、どうも # -*- coding: utf-8 -*- の記述位置が悪かったようで 途中に記述していたコメントを移動させて #!~/python # -*- coding: utf-8 -*- pythonのパスが先頭、次の行にcodingを記述したら動作するようになった マジックコメントって必要な場所より上にあればいいと思っていた・・・

Python + MySql で execute paramでテーブル名は渡せない

Python + MySql で execute paramでテーブル名は 渡せない そうです cur.execute( "DELETE FROM %s WHERE ( %s = %s );" , ( "myTable" , "myKey" , 10 )) # NG cur.execute( "DELETE FROM %s WHERE ( %s = %s );" % ( "myTable" , "myKey" , 10 )) # OK