MT4のエラーメッセージ:「Can’t call method "execute" on an undefined value ・・・」の対策の一案

2010年11月26日

「Can’t call method "execute" on an undefined value
at *****/extlib/Data/ObjectDriver/Driver/DBI.pm line 127.」
が出ますーとのこと。
いちばんの対策は、最新バージョンにアップすることです!
けど、バージョンアップもWordPressのように簡単にいかないのが、MTの弱点。
なので対処療法でひとまずエラー回避を行うしかないのだ。
検索すれば、同じ問題に遭遇した人が見つかるし、解決方法も見つかる。
この情報が多いところが、MTの良いところ。
で、本題。
今回は、検索でエラー回避情報を見つけるよりも、エラーの周辺を固めていくことで原因が判明。
そのことを理解したうえで、エラー回避の対処法を講じた。
さて、このエラーが起こるのは、
1.トップページ(メインページ)の更新(変更・追加)を行うと発生する。
→「インデックスのみ」再構築を行ったときにでる。
 
2.けど、問題なくトップページは更新されている。
ということで、「メインページ」テンプレート以外のインデックステンプレートが原因だろうと推定。


1.「メインページ」テンプレートの[保存と再構築]ボタンを押してもエラーはでない。
2.再構築ウィンドウで「インデックスのみ」で再構築を行うと、以下のエラーメッセージ。
Can’t call method "execute" on an undefined value
at *****/extlib/Data/ObjectDriver/Driver/DBI.pm line 127.

ここで、エラーメッセージが表示されたことで、[テンプレートの編集]ボタンが出現。
これをおすと、エラー原因のテンプレートが表示された。
このテンプレート、xmlサイトマップ作成のためのテンプレート。
[保存と再構築]ボタンを押すと、エラーメッセージが表示される。
(ちなみに、念のため他のインデックステンプレートでの[保存と再構築]はエラーがでなかった)
このテンプレートはいたって、シンプルなので
行を抜いたり、追加したりして問題箇所発見。
ブログ記事すべてを出力させる「<MTEntries lastn="9999">」の9999が原因。
————–
<MTEntries lastn="9999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
<changefreq>daily</changefreq>
</url>
</MTEntries>
————–
<1000 (999以下)に設定するとエラーがでないが、1000を超えるとエラーメッセージがでる。
現在、ブログ記事は1100強になっており、このエラーがではじめたのは、記事数が1000になったときであろうと推測できる。
つまり、最大値を設定しているが、MTEntriesが999までは数えられるけど、1000個目からはカウントできないということである。
例えると、数字をおぼえたての子供のような頭の構造。
または英語でのカウントが途中からおぼつかなくなった日本人の状況か(笑)
さて、プログラムを変更するしかないがどうしたものか・・・
検索での情報では、ソースを直して対処している方法もあるが今回は、原因が判明しているので、
MTタグで対応する。
MTEntriesのモディファイアの offset と lastn を組み合わす。
999までカウントしたら、1000からはリセットして1からカウントできるようにした。
————–
<MTEntries lastn="999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
<changefreq>daily</changefreq>
</url>
</MTEntries>
<MTEntries offset="999" lastn="1999">
<url>
<loc><$MTEntryPermalink encode_xml="1"$></loc>
<lastmod><$MTEntryModifiedDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
<changefreq>daily</changefreq>
</url>
</MTEntries>
————–
しかしこれでは、ブログ記事が2000になるとまたエラーが発生するため当面の対処法でしかない(^^;
2000記事になるまでの対処法と伝えたが、それまでにMT4の最終バージョンにアップグレードが必要である。
時期バージョンMT5.1にアップする価値があるような機能が追加されることを期待したい。
けど、自動バージョンアップ機能は無理だろうなぁ。

MT4.22のエラーメッセージ

(※「Can’t call method "execute" on an undefined value」
のメッセージのエラー情報はいくつか書かれている。
この記事のエラーはプログラム名ソース行までエラーが出ていたため、原因もはっきりしているが、上記のみのメッセージの場合は、また原因や対処法も違うようである。)