質問編集履歴

1 解決したコードを追記

tuckQ

tuckQ score 55

2016/10/30 13:47  投稿

Undefined offset: 0 のエラー
###前提
目的:WordPressのコメント欄にカスタムコメントの内容を表示する
経緯:
1. 下記「該当のソースコード」のコードはもともと正常に動いていた
2. カスタムコメント保存用テーブルにある列の名称を変更「comment」から「pro」に変更
3. (2.)の修正以降に投稿したコメントの表示欄で「Undefined offset: 0 のエラー」が出るようになった (※「2」の修正前に保存されたデータは正常に表示されている。下記、テーブル構成例のreview_i=1は正常、2,3でエラーが出る)
+------+--------------------------------+-----+-----+
| review_id | treki | pro |
+------+--------------------------------+-----+-----+
|1|10|null|
|2|20|テストデータ|
|3|20|null|
+------+--------------------------------+-----+-----+
###発生している問題・エラーメッセージ
```
Notice: Undefined offset: 0 in hoge.php on line 100
```
`Notice: Undefined offset: 0 in hoge.php on line 100`
###該当のソースコード
```php
add_filter( 'get_comment_author_link', 'show_review', 10, 3 );
function show_review( $return, $author, $comment_ID ) {
   global $wpdb;
   $results = $wpdb->get_results( "SELECT treki FROM wp_review_meta WHERE review_id = $comment_ID", ARRAY_A );
   $treki = $results[0]['treki'];
   if ( $treki ) { $return .= '(' . $treki . ')'; }
   return $return;
}
```
###試したこと
var_dump($result)をすると、以下の配列が確認できている。
```  
array (size=1)
 0 =>
   array (size=1)
     'treki' => string '20' (length=2)
```  
考えられる原因のご教示よろしくお願いいたします。
考えられる原因のご教示よろしくお願いいたします。
###追伸(この件は下記コードで解決しました。解決に至るまでに試したコードも記述しましたのでご参考ください。)
(1)ARRAY_Aを削除
```php
   $results = $wpdb->get_results( "SELECT treki FROM wp_review_meta WHERE review_id = $comment_ID" );
   $treki = $results[0]['treki'];
   if ( $treki ) { $return .= '(' . $treki . ')'; }
   return $return;
```
**結果** `Fatal error: Cannot use object of type stdClass as array in`
---
(2) ARRAY_Nに変更
```php
   $results = $wpdb->get_results( "SELECT treki FROM wp_review_meta WHERE review_id = $comment_ID", ARRAY_N );
   $treki = $results[0]['treki'];
   if ( $treki ) { $return .= '(' . $treki . ')'; }
   return $return;
```
**結果** `Notice: Undefined offset: 0 in`
---
(3) ARRAY_Aに戻し、SQL文を下記に変更。
```php
   $results = $wpdb->get_results( "SELECT * FROM wp_review_meta WHERE review_id = $comment_ID", ARRAY_A );
   if ( $results ) { $return .= '(' . $results[0]['treki'] . ')'; }
   return $return;
```
**結果** `解決`
###追伸
「なぜ最初のコードでうまくいかないのか?」が未だに分からないので、お分かりになる方がいらっしゃったら解説いただけるとありがたいです。
  • PHP

    24042 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • WordPress

    8937 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る