EthnaのEthna_AppObjectクラスはなかなか癖はありますが、ちょろっとした小規模のシステムの場合重宝する。
やっぱ楽なので。
古い環境(MySQL3.23.xとか)の場合、ちょっとばかり面倒な箇所があるので、こんなケースレアかもしれないけど、僕にはまだまだ必要なので晒しておく。
MySQLの3と4ではLIMIT/OFFSET句の書き方が違い、そこでこける。
ということで、Ethna_AppObject又はオーバーライドしたクラスの_getSQL_SearchProp()って関数を修正。
MySQL以外のDBの時のは検証してないけど、多分いけるはず。
まー、新規で開発する場合はいらないけどね。
version_compare()とmysql_get_server_info()なんて関数があることにびっくり。
勉強になった。
やっぱ楽なので。
古い環境(MySQL3.23.xとか)の場合、ちょっとばかり面倒な箇所があるので、こんなケースレアかもしれないけど、僕にはまだまだ必要なので晒しておく。
MySQLの3と4ではLIMIT/OFFSET句の書き方が違い、そこでこける。
ということで、Ethna_AppObject又はオーバーライドしたクラスの_getSQL_SearchProp()って関数を修正。
// LIMIT, OFFSET
$limit = "";
-if (is_null($count) == false) {
- $limit = sprintf("LIMIT %d", $count);
- if (is_null($offset) == false) {
- $limit .= sprintf(" OFFSET %d", $offset);
- }
-}
+if (is_null($count) == false) {
+ // mysqlの4.0.0未満かどうかのチェック
+ if (
+ ($this->db->type == "mysql") &&
+ (version_compare(
+ preg_replace('|[^0-9\.]|', '', @mysql_get_server_info()),
+ '4.0.0',
+ '<')
+ )
+ // mysqlの4.0.0未満の場合
+ ) {
+ if (is_null($offset) == false) {
+ $limit = sprintf("LIMIT %d", $offset).sprintf(", %d", $count);
+ } else {
+ $limit = "LIMIT 0".sprintf(", %d", $count);
+ }
+ // それ以外の場合(デフォルトのソースのまま)
+ } else {
+ $limit = sprintf("LIMIT %d", $count);
+ if (is_null($offset) == false) {
+ $limit .= sprintf(" OFFSET %d", $offset);
+ }
+ }
+}MySQL以外のDBの時のは検証してないけど、多分いけるはず。
まー、新規で開発する場合はいらないけどね。
version_compare()とmysql_get_server_info()なんて関数があることにびっくり。
勉強になった。
コメント