[PHP][PEAR] Column count of mysql.proc is wrong. エラーの解決方法

PHP で PEAR::DB を使って UPDATE 文を発行したら DB Error: unknown error というエラーが発生しました。

getMessage() でのエラー内容

DB Error: unknown error

このエラー内容では何の手掛かりにもならないので、もっと詳しいエラー内容を getDebugInfo() で取得してみました。

  • getMessage() : DB Error: unknown error
  • getDebugInfo() : INSERT INTO テーブル名 (列名1,列名2,列名3) VALUES(値1,値2,値3) [nativecode=1364 ** Field ‘列名4’ doesn’t have a default value]

エラーを getDebugInfo() で取得してみると、自分のエラーは以下の通りでした。
 
続きを読む

[Symfony1.4][Validator] カスタムバリデータを作成する方法

 

Symfony1.4で、カスタムバリデータを作成する方法を調べて、実践したのでメモ。
 

まず、カスタムバリデータを作る前に、自分が使いたいバリデータが既存のものにないか確認します。
 

symfony Forms in Action | 付録 B – バリデータ | symfony | Web PHP Framework
 

使いたいバリデータがない場合は、自分で作ります。
 

カスタムバリデータを作るときに参考になった記事は、Symfony1.4だと以下の通りです。
 

The More with symfony book | カスタムウィジェットとバリデータ | symfony | Web PHP Framework

symfonyでカスタムバリデータを使ってフィルタを実装する – spanstyle::monolog

symfonyのValidatorで全角/半角変換などを行う – ゆっくり*ゆっくり
 

実際に、書籍を特定するための番号であるISBNを入力値の長さと文字の構成を確認するバリデータを作ってみました。
 

ちなみに、ISBNは、ISBN-10だと10桁で、1桁目が 0 ~ 9 、X が使用され、他の桁は数字です。ISBN-13は13桁で、数字のみで構成されています。
 

・参考:ISBN – Wikipedia
 

正規表現の使い方はこちらを参考にしました。
 

正規表現 | PHP Labo

正規表現
 

そして、実際に作ったのが下記のソースになります。
 

■ myValidatorIsbn.class.php
 

(ISBNの形式に合ってるか確認するバリデータ)
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
 
class validatorIsbn extends sfValidatorBase
{
	protected function doClean($value)
	{
		// 入力値の長さが10文字の場合、そのまま入力値を返す
		// ISBN-10は、1桁目が 0 ~ 9 、X で構成され、他の桁は数字
		if (strlen($value) == 10){
			if (preg_match("/^[0-9]{9}?[0-9X]$/" ,$value)){
				return $value;
			} else {
				throw new sfValidatorError($this, 'ISBN-10は1桁目は 0~9 、X、他の桁は数字で入力して下さい', array('value' => $value));
			}
		}
 
		// 入力値の長さが13文字の場合、そのまま入力値を返す
		if (strlen($value) == 13){
			// ISBN-13は数字のみで構成される
			if (preg_match("/^[0-9]{13}?$/" ,$value))
			{
				return $value;
			} else {
				throw new sfValidatorError($this, 'ISBN-13は数字のみで入力して下さい', array('value' => $value));
			}
		}
		// それ以外の場合、エラー
		throw new sfValidatorError($this, 'ISBNは10文字、または13文字で入力して下さい', array('value' => $value));
	}
}

 

■ IsbnSearchForm.class.php
 

(ISBNの入力フォームを定義しているフォームファイル)
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
class IsbnSearchForm extends BaseForm
{
	public function configure()
	{
		$this->setWidgets(array(
			'isbn' => new sfWidgetFormInput(array(), array('size' => 20, 'maxlength' => 13, )),
		));
 
		$this->setValidators(array(
			'isbn' => new myValidatorIsbn(array('required' => true, ),
										  array('required' => '未入力', )),
		));
 
		$this->widgetSchema->setNameFormat('isbn_search[%s]');
 
		$this->widgetSchema->setLabels(array('isbn' => 'ISBN10/13', ));
	}
}

 

以上です。
 

[Symfony1.4] csrf token: Required.

 

Symfony1.4にて、フォームを作成して使ってみたらエラーが発生しました。
 

■ エラー内容

csrf token: Required.
 

■ 解決方法

フォーム内にHiddenフィールドを吐き出してなかったのが原因でした。

以下の内容をフォーム内に書けばOKです。
 

1
<?php echo $form->renderHiddenFields() ?>

 
以上です。
 

【参考】

さぼてん: 【symfony】_csrf_tokenとsetWidgets()

symfonyでCSRFがうまく動かない | OKWave

symfony1.2のCSRF対策について : アシアルブログ

csrf_secretを設定している場合のフォーム生成メモ – 偏った言語信者の垂れ流し
 

[Facebook] Page Tabアプリ/Canvasアプリのページの幅(width)

 

Facebookアプリのページ幅を調べたのでメモ。
 

・Page Tab(ページタブ)アプリのページ幅(width)

520px
 

・Canvas(キャンバス)アプリのページ幅(width)

760px
 

以上です。
 

【参考】

Facebook、ページの幅を変更 | ブログヘラルド はてなブックマーク - Facebook、ページの幅を変更 | ブログヘラルド
 

FacebookアプリのCookieをIEで有効にする方法

 

FacebookアプリをIEことInternet Explorerへ対応する方法を調べたのでメモ。
 

Facebookページ内に埋め込むタイプのFacebookアプリは、iframe内で別ドメインのコンテンツを読み込んで動作しています。
 

iframeで別ドメインのコンテンツを読み込むと、そのCookieはサードパーティーのCookieとなります。IEのデフォルトでは、ポリシーが定義されていないサードパーティーのCookieは受け入れないようになっていて、P3P (www.w3.org)でポリシーを宣言すれば受け入れられるようになります。

・引用元:P3Pコンパクトポリシーをコピペするのが流行らないことを祈る | 水無月ばけらのえび日記 はてなブックマーク - P3Pコンパクトポリシーをコピペするのが流行らないことを祈る | 水無月ばけらのえび日記

 

IEの場合、デフォルトの設定で「P3Pコンパクトポリシーが定義されていないサードパーティーcookieは受け入れない」動作となっている為、Facebookアプリでも、FirefoxやChromeだとちゃんと動くのにIEだとなぜか動かない…という現象に遭遇したりします。

・引用元:FacebookアプリのCookieがIEで無効になってしまう現象を回避する方法 – でぶぬる日記 はてなブックマーク - FacebookアプリのCookieがIEで無効になってしまう現象を回避する方法 - でぶぬる日記

 

解決方法は、レスポンスのHTTP headerに具体的なポリシーの内容を出力するだけでOKです。
 

■ Ruby on Rails
 

1
2
3
4
5
6
# application_controller.rb
before_filter :ie_p3p_fix
 
def ie_p3p_fix
  response.headers["P3P"] = 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'
end

 

■ PHP
 

1
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

 

以上です。
 
 

【参考】

FacebookアプリのCookieがIEで無効になってしまう現象を回避する方法 – でぶぬる日記 はてなブックマーク - FacebookアプリのCookieがIEで無効になってしまう現象を回避する方法 - でぶぬる日記

Facebookアプリ作ってて困った事というか、IEでiframe内の別ドメインのページでもクッキーを有効にする方法とか、セキュリティレベルを下げずにCookieを有効にする方法とか – kissrobberの日記 はてなブックマーク - Facebookアプリ作ってて困った事というか、IEでiframe内の別ドメインのページでもクッキーを有効にする方法とか、セキュリティレベルを下げずにCookieを有効にする方法とか - kissrobberの日記

IE/SafariでFacebookアプリの無限reload対策 はてなブックマーク - IE/SafariでFacebookアプリの無限reload対策

php – Facebook iframe not working in IE; session/login issue? – Stack Overflow はてなブックマーク - php - Facebook iframe not working in IE; session/login issue? - Stack Overflow

session – Facebook app works on all browsers but not IE8 – Stack Overflow はてなブックマーク - session - Facebook app works on all browsers but not IE8 - Stack Overflow
 

Heroku-ja Meetup #1 スライドまとめ

 

最近、Herokuを使い始めて、「Heroku-ja Meetup #1」というイベントが開催されていたことを知り、発表されたスライド資料をまとめてみました。
 

Heroku-ja Meetup #1 : ATND はてなブックマーク - Heroku-ja Meetup #1 : ATND
 

 

請求書.jp はてなブックマーク - 請求書.jp
 
 

・スライド:Herokuをいろいろ触ってみた | SonicGarden / mat_aki はてなブックマーク - Herokuをいろいろ触ってみた
 
 

 

Heroku-ja Meetup #1でLokkaのLTさせてもらいました – komagata はてなブックマーク - Heroku-ja Meetup #1でLokkaのLTさせてもらいました - komagata
 
 

 

Heroku-ja Meetup #2 があるときはぜひ参加したいです。
 

[Facebookアプリ] JavaScript SDK は必ず https で利用すべし

 

Facebookアプリにて、JavaScript SDK を使う場合は、SSLで利用しないとIEで上手く動作しないなどのバグが発生してしまいます。
 

JavaScript SDKを利用するには、ほとんど Facebook Connect はSSLでも利用できるので、今まで

1
<script src="http://connect.facebook.net/en_US/all.js"></script>

としていたのなら

1
<script src="https://connect.facebook.net/en_US/all.js"></script>

に置き換えるだけでOKです。
 

httpsのページに部分的にセキュアでない接続が混在しているとブラウザ(特にIE)によっては正常に動作しないので注意が必要です。
 

【参考】

JavaScript SDK – Facebook Developers はてなブックマーク - JavaScript SDK - Facebook Developers
 

[JS] jQueryが読み込まれているか確認する方法

 

jQueryが読み込まれているか確認する方法を調べたのでメモ。
 

jQueryを使い始めたばかりだと「$が定義されてません」というエラー「$ is not defined」がよく発生します。
 

以下のコードではtypeof演算子で jQuery が定義されているか確認して、定義されている場合はアラートを表示させています。
 

1
2
3
4
5
if(typeof jQuery != "undefined"){ //jQueryの読み込み確認
    $(function(){
        alert('jQuery is ready.')
    });
}

 

以上です。
 

【参考】

jQueryが読み込まれているか判別する方法 – 小窓屋めがね はてなブックマーク - jQueryが読み込まれているか判別する方法 - 小窓屋めがね

typeof演算子 – 演算子 – JavaScript入門 はてなブックマーク - typeof演算子 - 演算子 - JavaScript入門
 

[Rails] Heroku標準のPostgreSQLへのdb:migrateをやり直す方法

Herokuで強制的にdb:migrateをやり直す方法を調べたのでメモ。

まず、HerokuではRails標準のrake db:resetは使えません。

代わりに、pg:resetコマンドで Herokuの標準のpostgresのDBをリセットすることができます。

$ heroku pg:reset --db SHARED_DATABASE_URL

コマンド実行後、確認のためプロンプトが表示されるので、アプリ名を入力するとリセットが実行されます。

ちなみに、SHARED_DATABASE_URLは以下のコマンドで確認できます。

$ heroku console
Ruby console for codenote.heroku.com
>> ENV['DATABASE_URL']
=> "postgres://username:password@ec2-000-00-000-00.compute-1.amazonaws.com/dbname"

・参考:Heroku | Dev Center | PostgreSQL はてなブックマーク - Heroku | Dev Center | PostgreSQL
 

他にも、db:migrateをやり直す方法があり、VERSION=0 を指定することで最初にdb:migrateする前の初期状態に戻すことができます。

(最初にdb:migrateしたときのマイグレーションファイルが存在することが前提)

$ heroku rake db:migrate VERSION=0

また、db:migrate:redo で何回か前の状態(STEP=回数)に戻すこともできます。

$ heroku rake db:migrate:redo STEP=10

以上です。

【参考】

[Rails][Heroku] Herokuで強制的にdb:migrateをやり直す。その2 – mat_akiの日記 はてなブックマーク - [Rails][Heroku] Herokuで強制的にdb:migrateをやり直す。その2 - mat_akiの日記

Herokuで強制的にdb:migrateをやり直す。 – このブログは証明できない。 はてなブックマーク - Herokuで強制的にdb:migrateをやり直す。 - このブログは証明できない。

Ruby on Rails Guides: Migrations はてなブックマーク - Ruby on Rails Guides: Migrations
 

[Facebook API] IFrameタブページでスクロールバーを消す関数 setAutoGrow()

Facebook にて IFrame タブページでスクロールバーを表示しない関数は setAutoGrow() を使います。

従来までの setAutoResize は2011年12月31日までしか使えません。

続きを読む