PHP Archive
PDOをサポートした、SQL Server Driver for PHP 2.0のCTP版が出たようです
SQL Server Driver for PHP 2.0 CTP adds PHP’s PDO style data access for SQL Server
ということで、ようやく待ちに待ったPDO対応のSQL Server Driver for PHPが出た様子。
CTP版はダウンロードセンターからダウンロードできます。
Drupal7をこのSQL Server Driver for PHP 2.0を利用して動かすデモもDrupal Con SFで行われるようですね。
PHPにおいてのSQL Server利用はなかなか難しいところがありましたが、これでまた有力な選択肢に戻ってきたかもしれません。

- Comments: 0
- Trackbacks: 0
SQL Server Driver for PHP 1.1 がリリースされたようです。
- 2009-10-08 (木)
- PHP
Microsoft SQL Server Driver for PHP Team Blogより
SQL Server Driver for PHP 1.1が正式にリリースされたようです。
SQL Server Driver for PHP 1.1 is now available
内容は、以前から告知されていたようにPHP5.3への対応と、UTF-8への対応、scrollable result setsへの対応。それと、Windows AzureのSQL Azure databasesへも対応した様子。
あとはPDOドライバをリリースしてくれれば言うこと無しなんですがね・・・。出ないのかなあ・・・
- Comments: 0
- Trackbacks: 0
CakePHPを使い始めた。
- 2009-09-02 (水)
- PHP
今度の案件に利用するフレームワークを選定していました。
今までさわったことあるのは、SymfonyとZend Framework。
ただ、Symfonyは日本語の資料がまだまだ少なく、うちのような零細にとっては多少コストがかかってしまいそうなことがネック。
Zend FrameworkはZend自身が作っていることもあって、バージョンアップも頻繁ですし資料もそれなりに揃っているんですが、フレームワーク自体があまり束縛してこない、ゆるい仕様なのでどうしても書かなければいけないコード量が多くなってしまう。
ということで、日本語の資料もそこそこ揃っていて、かつコード量も少ないCakePHPを使おうと思った次第。
とりあえずチュートリアルでもこなしてみましょうかね。
- Comments: 0
- Trackbacks: 0
Zend_FormでValueが飛ぶ
- 2009-03-13 (金)
- PHP
なぜだ。
Zend_Formを使ってフォーム要素を作ってるんですが、なぜか呼び出したときにValueが消えます。
$elements['submit'] = new Zend_Form_Element_Submit('submit');
$elements['submit']->setValue('検索');
こんな感じにsetValueしてるんですが、たまにセットされずに真っ白なボタンができあがってしまうという。うーん、困る。
- Comments: 0
- Trackbacks: 0
Zend_Paginatorが分かりづらい
- 2009-03-06 (金)
- PHP
Zend Frameworkでページングを実装したかったので、Zend_Paginatorを使ってみようかと調べていたわけですが・・・
ドキュメントが酷く分かりづらい。
http://framework.zend.com/manual/ja/zend.paginator.html
これは酷い。
充実してるように見えて全然中身がない・・・。
もうちょっと試行錯誤してみる予定。
あ、ちなみに不調だったScribeFireのバージョンを落としたら問題なく投稿できました。
- Comments: 1
- Trackbacks: 0
PDO(Zend_Db)+SQL Server(ODBC)でStatement使うと型が無視られてTextになる
- 2009-03-05 (木)
- PHP
どうやらまた地雷を踏んだようだ。
Zend_Db(内部的にはPDO)のプリペアドステートメントを使っていると不可思議な現象に遭遇。SQL Serverから、型が違うと怒られるのだ。
こんな感じ
$query = "SELECT :test, :test2 FROM Table1 as si WHERE Name = :test3";
$stmt = $db->prepare($query);
$stmt->bindValue(":test","Name");
$stmt->bindValue(":test2","Mail");
$stmt->bindValue(":test3","jaco");
$stmt->execute();
こんな感じに書いて表示させようとすると、
The data types varchar and text are incompatible in the equal to operator.
と怒られる。ちなみにNameカラムはVarchar型。textとは比較できないよ、というエラーだけども、そもそも何でtext型になってんねん。
SQL Server Profilerで見てみると
declare @p1 int
set @p1=NULL
exec sp_prepare @p1 output,N’@P1 text,@P2 text,@P3 text’,N’SELECT @P1 as test1, @P2 as test2 FROM tblWebStayInformation as si WHERE CompanyCode = @P3′,1
select @p1
見事にすべてtext。勝手に変なことしないでください・・・。
ここでちょっとSQL文を変えてみると
$query = "SELECT * FROM Table1 WHERE Name = :test AND Sequence = :test2";
$stmt = $db->prepare($query);
$stmt->bindValue(":test","Name");
$stmt->bindValue(":test2","Mail");
$stmt->execute();
declare @p1 int
set @p1=NULL
exec sp_prepare @p1 output,N’@P1 varchar(50),@P2 varchar(50)’,N’SELECT * FROM Table1 WHERE Name = @P1, Mail = @P2′,1
select @p1
あぁ、Varcharになった。
つまり、Select句の中にプレースホルダを入れると、なぜか型が全無視されてTextになってしまうと。
調べてみるとここで報告されてました。
Bug #44643 bound parameters ignore explicit type definitions
今回試したのはPHP5.2.8なんですが、未だに直ってないのね・・・。
- Comments: 0
- Trackbacks: 0
Zend_Validate_Regexで日本語を使うときの注意
- 2009-02-27 (金)
- PHP
Zend FrameworkのZend_Validate_Regexでは、正規表現を書いてバリデーションを行うことができます。
Zend_ValidateにはAlnum(アルファベットや数字)、Alpha、Digits、Dateのような使う頻度が多そうなものから、Barcodeなど変わり種のものまで、さまざまなバリデーションクラスが用意されていますが、日本語に対応するものは用意されていないので、自分でバリデーションクラスを作ってしまうか、もしくはZend_Validate_Regexを使う必要があります。
頻繁に使うのならば、可読性を高めるためにもバリデーションクラスを自作してしまうほうがいいのですが、ちょっとした処理をするのならばZend_Validate_Regexを使ってしまうのもいいかと。
そんなわけでZend_Validate_Regexを使って半角カナの処理をしていたわけですが、どうも思ったような挙動になってくれない。
new Zend_Validate_Regex('/^[。-゚]+$/')
こんな感じで書いても、
「アイウエオ」にはマッチするが「タカハシ」にはマッチしてくれない。
なぜだー!と思いZend_Validate_Regexのソースを読んでみると、
$this->_setValue($valueString);
$status = @preg_match($this->_pattern, $valueString);
if (false === $status) {
/**
* @see Zend_Validate_Exception
*/
require_once 'Zend/Validate/Exception.php';
throw new Zend_Validate_Exception("Internal error matching pattern '$this->_pattern' against value '$valueString'");
}
こんな感じで単にpreg_matchで処理しているだけの様子。
もうすこし調べていると、こんなものを発見。
u (PCRE_UTF8)
この修正子は、Perl 非互換な PCRE の機能を有効にします。パターン 文字列は、UTF-8 エンコードされた文字列として処理されます。 この修正子は、UNIX では PHP 4.1.0 以降、Win32 では PHP 4.2.3 以降で 使用可能です。 また、PHP 4.3.5 以降では、パターンの UTF-8 としての妥当性も確認されます。
・・・なるほど、/uオプションを付ける必要があったのね。
new Zend_Validate_Regex('/^[。-゚]+$/u')
このような感じに変更したところ、意図したとおりの動作に。
半角カナに限らず、UTF-8を利用するときは必ずuオプションを付けるようにしたほうがいいかも。
- Comments: 0
- Trackbacks: 0
ホーム > PHP
- Search
- Feeds
- Meta