cakePHPで以下のエラーメッセージの対処法。 mysqlでDBに接続しようと思ったら、よくわからんエラーメッセージ。 苦戦しまくったから、メモ。 Error: A Database connection using "Mysql" was missing or unable to connect. The database server returned this error: Selected driver is not enabled Error: Mysql driver is NOT enabled php.iniに2行追加。(あらかじめ書いてある場合があるが、その場合はコメントアウトを外す) extension=php_pdo.dll extension=php_pdo_mysql.dll
CakePHP3でタイムゾーンを指定する手順の解説 CakePHP3の定義ファイルに記載してある「タイムゾーン」の設定は、標準設定では「UTC」になっています。 これを日本時間に設定を変更します。 ちなみに、「UTC」は「協定世界時」と呼ばれる世界の標準時刻で、かつて広く使われていました「グリニッジ標準時(GMT)」から置き換えられたものです。 また、日本の標準時は「JST」と表現します。 CakePHP3でタイムゾーンの設定をする前に MySQLの設定を確認する 「CakePHP3でタイムゾーンを設定する手順」として開設を行いますが、まず最初に、下記の記事に従って、MySQL側でタイムゾーンの設定がされているか、確認をしてください。 MySQLのタイムゾーン(mysql_tzinfo_to_sql)の設定方法・XAMPP環境の解説も この MySQLのタイムゾーンの設定ができていない場合
SNSみたいので発言があってそのコメントがある。 で、画面には発言の一覧があって、その発言についたコメントの数があって、このコメント数で並び替えたい! とかいう場合にどうするか、って話なんだけどさ。 昨日そういう話になって、おれは発言テーブルにカウント数のフィールドを作っておいてそれをコメントがつく度にプラスする、と言ったらそりゃ最低だ、せめてビューテーブル使ってくれ、と言われたので、ちょっと実験してみた。 発言テーブルは以下のようなもの。parent_id=0の時は親発言。コメントは常に親発言に対してのみ。ツリー状にならない。 mysql> desc posts; +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Ext
MySQL、CakePHPで「tinyint(1)」のフィールドは Boolean型として認識 MySQLでの「tinyint(1)」のフィールドは Boolean型と認識するが... MySQLの「tinyint(1)」の悲劇 Boolean型になるとは... この記事に「結論が間違っています」コメントをいただきました。 そのために検証を行った結果、「tinyint(1)」のフィールドが「Boolean型」として処理されるのは MySQLの機能ではなく、CakePHPの機能によって起こっていることを確認しました。 ※厳密な表現では、MySQLでは「tinyint(1)」で設定されたフィールドは Boolean型として処理する仕様となっているため、その定義に従って、CakePHPでは「0」「1」しか持てないように処理している、ということになるでしょう。 MySQLの定義については以下参照
テーブルをgroup by でカウントしたいのだが、cakeの機能だけではあまりスマートにできない。 なので、mysqlのview tableを使うことにしました。 view tableはsql文の結果をあたかも普通のテーブルのように定義してくれる便利な機能。Cakeからはただの普通のテーブルと同じように扱えるので、モデルを作ればそのままアクセスできます。(当然ながら保存はできませんが) で、DBはschema機能で作っているので、 cake schema generate でschema.phpを作ってそれをテスト環境でcake schema create してみたところ・・・。 ああああ!view tableじゃなく普通のテーブルになってる orz いろいろ調べてみたのですが、どうも対応していないっぽいです。 まぁ、ほかのDBエンジンでは実装されていないものもあるかと思いますので、仕方
プライベートで作ったWebアプリで、一画面だけブラウザに表示されるまで3秒かかる激重画面があります。 この画面ではCakePHPが自動的にいろんなテーブルをjoinしたSQLを生成しているので、その辺りが原因だろうとは感づきました。 それにしても、たかだか20行程度のselectなので、なんか変だ。。。 ちょっとだけ分析と改善をしました。(はじめてのパフォーマンスチューニング…ドキドキ) 結論としては、1000倍早くなりました。 CakePHPのクエリ自動生成は楽ですが、パフォーマンス上の問題が発生した時にはやはりSQLを知らないとダメだなぁ… 環境 VirtualBoxのVM(メモリ613MB)上に下記の環境があります。 CentOS 6.5 x64 nginx 1.0.15 PHP 5.5.13 MySQL 5.5.37 CakePHP 2.4.0 テーブル構造 テーブル 内容 外
MySQL で文字化けを防ぐためには SET NAMES utf8 のように SET NAMES を実行するのが有効なのですが、これを app/config/database.php で設定する方法です。 'encoding'=>'文字コード' をデータベースの設定項目に追加してやるだけです。 具体的には app/config/database.php が下記のようになります。 var $default = array( 'driver' => 'mysql', 'connect' => 'mysql_connect', 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'dbname', 'prefix' => '', 'encoding' => 'utf8' ); cake
CakePHPでDBからレコードを取得したり逆に入力したりする際にはfindやsaveというお手軽なメソッドがあるのでとても便利。 だけど、結構複雑なクエリーを投げなきゃいけないとなると、どう書けば良いのか分からなくなる場合も意外とあったりする。findの条件指定のときとか。BETWEENとかLIKEなんかも、一度知ってしまえばたいしたことはないのだけど、知らないとわりと悩む。少なくとも自分は悩みました。 どうしても困ったら$this->query()で直接SQL文を書いちゃえば良いのだろうけど、WHERE句でBETWEENを使う場合の記述でちょっと面白い書き方を発見したので、ここではそれで頑張ってみる。 じゃあたとえば、idが10から20の間のレコードを取得するとしましょう。 $params = array('conditions' => array('id BETWEEN ? AND
cakePHPはMySQLと相性がいいが、トランザクションにちょっと癖がある。 通常、 $this->Model->begin(); でトランザクションが開始されるのだが、cakePHPでは単純に BEGIN というSQLを流しやがる。PostgreSQLならいいが、MySQLじゃだめじゃん…。 というわけで以下のソースをAppModelに追加すると正常にトランザクションができる。 function begin() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->begin($this); } function commit() { $db =& ConnectionManager::getDataSource($this->useDbConfig); $db->commit($this); } fun
下記の流れは,一度は体験しておきたい。 ER図を書く。 → 1 から,DDL文+テーブルを自動生成。 → 2 から,テーブル定義書を自動生成。 → 2 から,Webアプリを自動生成。 コーディングなし。 例として,複数人で利用できるブックマークアプリのようなものを生成してみる。 「CakePHPが作ってくれる雛型(scaffold)はリッチだ」とよく言われるが,それを更にテーブル生成ツールと組み合わせたらどうなるか,というのが焦点。 CakePHPの入門方法もちょっと兼ねる。 事前準備(1/2):ツール ER図描画+DDL生成+テーブル定義書生成のために,A5SQLというフリーソフトを使うのでインストールしておく。 A5SQLをDL http://www.wind.sannet.ne.jp/m_matsu/... また,DB+DB管理+PHP実行のために,XAMPP+CakePHPを使う。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く