▼ 2008/01/17(木) CakePHPとSQLite(&MySQL)
(追記)この記事には続きがあります。cakephpとSQLiteの続き(2008/2/2)
(追記の追記)もっと効率的な修正方法があります。CakePHP1.2bとSQLite不具合のもっと簡単な直し方
(追記の追記の追記)CakePHP1.2をSQLite3で動かしてみた。&ダウンロード
なぜかサンプル程度つまづく。CakeでSQLiteを使っているのは少数派なのか、情報が少ない。
データベースのidフィールドが integer primary key なのに、cakephpで作られるSQL文が '' の入力になってたものだから、 datatype errorがでて困っていた。SQLiteはデータ型はルーズだけど、こんなエラーはだすのだなっと。
英語圏でも困っている人がいるようだが、Englishなのは私はダメなのである。http://groups.google.co.jp/group/cake-php/browse_thread/thread/d0160763dece38b0/6b9b7246a72945e2?lnk=gst&q=datatype+mismatch#6b9b7246a72945e2
こんな感じ
で、ソースをよくみると。。。原因はわかったが、どこを直すべきか難しい。とりあえずこうした。
/cake/libs/dbo/dbo_sqlite.php
cakephp1.19でのお話 うーん、1.2にしようかな。
(追記)
実はMySQLでも同じ現象が発生した。...もう一度よく考えると、
cake/libs/mode/dbo/dbo_mysql.phpの
おそらくsqliteも、最初の修正をしなくても、dbo_sqlite.phpの同じ箇所を直せばこれで通るでしょう。
しかし、こういうのみんなクリアーしてるのかね。
全然cakephp楽じゃないよ。これだけでえらい時間食ったよ。
こちらも参考になりました。http://papuh.s3.zmx.jp/2008/01/15/cakephp%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%80%801206311-beta/
MySQL5.0.45 でのお話
(追記の追記)もっと効率的な修正方法があります。CakePHP1.2bとSQLite不具合のもっと簡単な直し方
(追記の追記の追記)CakePHP1.2をSQLite3で動かしてみた。&ダウンロード
なぜかサンプル程度つまづく。CakeでSQLiteを使っているのは少数派なのか、情報が少ない。
データベースのidフィールドが integer primary key なのに、cakephpで作られるSQL文が '' の入力になってたものだから、 datatype errorがでて困っていた。SQLiteはデータ型はルーズだけど、こんなエラーはだすのだなっと。
英語圏でも困っている人がいるようだが、Englishなのは私はダメなのである。http://groups.google.co.jp/group/cake-php/browse_thread/thread/d0160763dece38b0/6b9b7246a72945e2?lnk=gst&q=datatype+mismatch#6b9b7246a72945e2
こんな感じ
Warning: sqlite_query() [function.sqlite-query]: datatype mismatch in C:\www\Cake\cake\libs\model\dbo\dbo_sqlite.php on line 115
Query: INSERT INTO "dbs" ("id","name") VALUES ('','abc')
Warning: SQL Error: 20: datatype mismatch in C:\www\Cake\cake\libs\model\datasources\dbo_source.php on line 440
で、ソースをよくみると。。。原因はわかったが、どこを直すべきか難しい。とりあえずこうした。
/cake/libs/dbo/dbo_sqlite.php
function value ($data, $column = null, $safe = false) {
$parent = parent::value($data, $column, $safe);
if ($parent != null) {
return $parent;
}
if ($data === null) {
return 'NULL';
}
if ($data === '') {
return "''";
}
を探しだし
if ($data === null) {
return 'NULL';
}
を
if ($data === null || $data === '' && $column=='integer') {
return 'NULL';
}
に変更。cakephp1.19でのお話 うーん、1.2にしようかな。
(追記)
実はMySQLでも同じ現象が発生した。...もう一度よく考えると、
cake/libs/mode/dbo/dbo_mysql.phpの
- function value($data, $column = null, $safe = false)
if ($data === '') {
return "''";
}
を
if ($data === '') {
//spok_added
if($column=='integer'){return 'null';}
//spok_end
return "''";
}
とすればうまくいった。おそらくsqliteも、最初の修正をしなくても、dbo_sqlite.phpの同じ箇所を直せばこれで通るでしょう。
しかし、こういうのみんなクリアーしてるのかね。
全然cakephp楽じゃないよ。これだけでえらい時間食ったよ。
こちらも参考になりました。http://papuh.s3.zmx.jp/2008/01/15/cakephp%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%80%801206311-beta/
MySQL5.0.45 でのお話
▼ コメント(0件)
- TB-URL http://www.cpa-lab.com/tech/017/tb/
-
▼
[PHP]CakePHPをAN HTTPD+SQLiteで動かす
genms’ blogこの環境で、CakePHPのScaffoldingを一通り動作させることができました。 ただその際、環境特有と思われる設定や変更が発生したので、メモ。 環境 AN HTTPD 1.42n PHP 5.1.4 SQLite 2 【AN HTTPD関係】 m...
-
▼
Cakephpでsqliteの続き。editとdeleteの修正
CPA-LABテクニカル 以前にSQliteでのnew時(insert)の不具合を修正したのだけれど、今度は、editとdeleteでも不具合があることがわかった。しばらくMySQLのお勉強をしていたので、sqliteはほっておいたんだけど、やっぱりsqliteが恋しいので戻ってき...
-
▼
CakePHP1.2bとSQLite不具合のもっと簡単な直し方
CPA-LABテクニカル 私、nightlyって知りませんでした。ソフト開発の世界では、nightly buildとは、開発途上版ということなのですね。で、CakePHPでは、そのnightly buildが公開されていると。だからそれを使えばいいだぞ、と。こちらCakePHPでは...