wordpress×SQLite」タグアーカイブ

wordpressをSQLiteで動かそう

SQLite Integrationの『Notice: Undefined property』対応

wordpressを5.0にしたら、SQLプラグイン『SQLite Integration』にて

Notice: Undefined property: stdClass::$compile_option in ~

といった426行目・424行目原因指定のNoticeエラーがたくさん出てくるようになった。

これは書かれている通り『$compile_option』がないせい。
まぁ、このプラグイン公開されてから大分放置されているしね…

---後日談---
5.1にしたらなんと『compile_option』に戻っていた。
よって、修正は不要なのだ!
都合上5.0を使いたい人だけ直せばいいんじゃないですか話ということで、記事は残しておく。
---------- ココマデ ----------
続きを読む

[wp×SQLite]投稿時の記事数取得

wordpressを3系にしてから投稿は出来るんだけど、フロントからカテゴリが消えてしまうという現象が起きるようになった。

『esc_sql()』というものが配列には対応しておらず、
post_type IN()でこのポストタイプの判断条件がエラーしていることが原因だった。

その対応方法。
続きを読む

[wp×SQLite]アップデート・プラグイン導入時気をつけること

SQLiteって、他のDBよりも明らかに『型』が少ない。
それはもう本当に…。

『想定通り動いていない』とか、『随分レスポンスが遅い』とか、動きに何だか違和感がある場合において、作成されたテーブルにエラーが起きている可能性がある。

wordpressをupdateしたり、pluginをinstallした場合に起きやすいのだが、
SQLの構文エラーが起きて、
通常なら自動的に作られるハズの『テーブルが、出来ていなかった』り、
通常なら自動的に追加されるハズだった『カラムが、追加されていない』
ということが、起こり得る。

導入の直後に極端に不調でも起きるのであれば、何が原因かとか判別しやすいからいい。

だが、これが直後は特にエラーも違和感なく、調子にのって色々入れた後、使ってるうちに何だか調子悪いような気がして「どれだ…?」となってしまうことがしばしば…。

そんな『SQLiteプラグインと相性が悪いか後入れ判断する』際の解決法。
続きを読む

SQLiteファイルをデフラグする

wordpressにて、記事等を追加していくと、比例してファイルサイズが大きくなる。
しかし記事・カテゴリ・タグ等をデータを削除したとしても、比例して容量が減るわけではない

というのも、MySQLでもお馴染みの『空いた領域をそのまま維持して、後でデータが追加された場合に利用する』というDBの仕様のためらしい。

記事・カテゴリの追加・削除の繰り返しにより細切れ領域が増え、アクセスに影響が起きるわけである。

ということで、
必要なのは『SQLiteデータベースファイルのデフラグ』。
なので、その仕方についてのメモ。
続きを読む

[wp×SQLite]アクセス時にtimeoutエラー

本日のブラウザ初回起動時とかに下記が出ることがある。

Fatal error: Maximum execution time of 30 seconds exceeded in XXX\XXX\wp\wp-content\pdo\PDOEngine.php on line XXX

どうにもPHPでタイムアウトらしい。

でも鯖缶様に結構長めにして貰ってあるので、きっとPCを起動する際に読み損ねてるんだろうと思っていた。

ところがどっこいPDOEngine.php内で設定しちゃっていたのだ。

続きを読む

[wp×SQLite]存在しないカテゴリ名使うとPDOエラー

PATH_INFO形式のとき
http://example.com/category/aaaa/
みたいに存在しないカテゴリ名前を出すとPDOエラーが出る
そんなときの対処

wp-content/pdo/PDOEngine.php

private function executeQuery( $statement )内

if (count($this->extractedVariables) > 0){
	$this->queries[] = "Executing:\t ".print_r($this->extractedVariables, true);

if (count($this->extractedVariables) > 0){
	//$this->queries[] = "Executing:\t ".print_r($this->extractedVariables, true);
	$this->queries[] = "Executing:\t (nodata)";

とする。

「全部出そうが出すまいが、データがないもんはないので知らんわい!」という対処。

[wp×SQLite]ページ送り『SELECT FOUND_ROWS()』対応

categoryとかarchiveとか一覧表示すると次のページとかのリンクが出ない。
そんな条件がなければ出るのに…

つまりページ数認識ではないか?

調べてみたところ、結構な記事数があるカテゴリでも
『$wp_query->max_num_pages』が『1ページ』となってしまっている。

つまりSQL文がオカシイ

こんな単純なミスが修正されないハズがないので、
またSQLiteとMySQLとの仕様差異と皆気づくところ。

WP_Queryはwp-includes/query.phpにあるので確認したところ、そりゃ当然アタリ。
続きを読む

[wp×SQLite]一部使えないプラグイン対応

色々変わって読みづらくなったので、いっそ書き換え

例えば
SELECT p.post_title FROM テーブル AS p
というSQLがあるとする。

MySQLなら配列は『$うんつら["post_title"]』として返してもらえるんだけど、
SQLiteだと『$うんつら["q.post_title"]』として返される。

そのせいでSimple Tags等、巧く動かないプラグインが多数ある。

前回同様SQL文を書き換えようと思ったのだけど、
『q.post_title as post_title』みたいに
『AS うんつら』と既に宣言されているものもあるのだから、なかなか巧くいかない。
※q.post_title as post_title AS post_title as post_title てなる

そこで『配列の添字を書き換えて作り直す』修正をする。
続きを読む

[wp×SQLite]ページ編集が巧くいかない

ページの編集が巧く使えない。
あくまでページ編集。
原因は$hierarchical_post_types[0]がうまく取得出来ないとこにあった。
SQLiteとMySQLで使えるSQLが違うから、他にも出てくるかもしれない。
続きを読む