###前提・実現したいこと
当方WordPress初心者で、オリジナルのテーブルへのINSERTを試みています。
以下のソースコードにおいて、$wpdb->insert
がfalse
を返し、解決策を見つけることができません。
ご指南頂けましたら幸いです。
###発生している問題
以下ソースコードで
$rows = $wpdb->insert( $table_name, $update_info, $format_arr );
の$rows
がfalse
となります。
該当のソースコード
実行部分ですが、header.php で下記の流れを組んでいます。
php
1<div class="phptest"> 2 3<?php 4$update_info = [ 5 'ip'=> '10.0.00.0', 6 'kinds_ID'=> 2, 7 'sentence'=> "hello", 8 'slug'=> "abc", 9 'users_ID'=> 1 10]; 11 12$format_arr; 13foreach ( $update_info as $v ) { 14 $format_arr[] = my_get_sql_format($v); 15} 16var_dump($format_arr); 17 18$insert_id = my_insert_sql_row( 'wp_breads', $update_info ); 19var_dump($insert_id); 20?> 21 22</div><!-- .phptest -->
上記には型を判定する関数my_get_sql_format()
と、挿入する関数my_insert_sql_row()
が含まれているので順に以下提示します。
まず型を判定する関数は下記です。(これは問題ございません。)
php
1function my_get_sql_format( $v ){ 2 $format; 3 $type = gettype( $v ); 4 if ( $type == 'string' ) { 5 $format = '%s'; 6 } elseif ( $type == 'integer' ) { 7 $format = '%d'; 8 } 9 return $format; 10}
そして挿入する関数は下記です。
この関数の冒頭で戻り値$result
を定義しており、エラーの際はこの$result
に
$result['error_wrapper']['error_info']['エラー箇所'] = エラー内容;
のように入ることでエラー内容を検出する意図です。
今回の件では$rows
がfalse
になりますので
$result['error_wrapper']['error_info']['$rows'] = false;
が戻ることが問題となっています。
php
1function my_insert_sql_row( $table_name, $update_info ){ 2 global $wpdb; 3 4 // エラー 5 $result = [ 6 'error_wrapper'=>[ 7 'func' => 'my_insert_sql_row()' 8 ,'args' => [ '$table_name'=>$table_name, '$update_info'=>$update_info ] 9 ,'error_info' => [] 10 ] 11 ]; 12 13 // 型を判定 14 foreach ( $update_info as $v ) { 15 $format_arr[] = my_get_sql_format($v); 16 } 17 18 // 挿入を実行 19 $rows = $wpdb->insert( $table_name, $update_info, $format_arr ); 20 21 // エラーがあれば取得して戻す 22 if( ! $rows ){ 23 $result['error_wrapper']['error_info']['$rows'] = $rows; 24 $result['error_wrapper']['error_info']['last_query'] = $wpdb->last_query; 25 $result['error_wrapper']['error_info']['last_error'] = $wpdb->last_error; 26 $result['error_wrapper']['error_info']['show_errors'] = $wpdb->show_errors(); 27 $result['error_wrapper']['error_info']['hide_errors'] = $wpdb->hide_errors(); 28 }else{ 29 $result = $wpdb->insert_id; 30 } 31 return $result; 32}
###試したこと
上記ソースコード後半のif
が下記ですが、このように各種エラーを出力するように書いたつもりです。
php
1 $result['error_wrapper']['error_info']['$rows'] = $rows; 2 $result['error_wrapper']['error_info']['last_query'] = $wpdb->last_query; 3 $result['error_wrapper']['error_info']['last_error'] = $wpdb->last_error; 4 $result['error_wrapper']['error_info']['show_errors'] = $wpdb->show_errors(); 5 $result['error_wrapper']['error_info']['hide_errors'] = $wpdb->hide_errors();
そしてここまで書いた流れを実行した結果(先述したheader.phpの出力結果)が下記HTMLとなりました。
ご覧のように詳しいエラーを出力してくれない状態です。
唯一last_query
にSHOW FULL COLUMNS FROM 'wp_breads'
という結果が出力されていますがこれも謎で、このようなSQL文はどこにも書いておらず困惑中です。
html
1<div class="phptest"> 2 3array(5) { 4 [0]=> 5 string(2) "%s" 6 [1]=> 7 string(2) "%d" 8 [2]=> 9 string(2) "%s" 10 [3]=> 11 string(2) "%s" 12 [4]=> 13 string(2) "%d" 14} 15array(1) { 16 ["error_wrapper"]=> 17 array(3) { 18 ["func"]=> 19 string(19) "my_insert_sql_row()" 20 ["args"]=> 21 array(2) { 22 ["$table_name"]=> 23 string(9) "wp_breads" 24 ["$update_info"]=> 25 array(5) { 26 ["ip"]=> 27 string(9) "10.0.00.0" 28 ["kinds_ID"]=> 29 int(2) 30 ["sentence"]=> 31 string(5) "hello" 32 ["slug"]=> 33 string(3) "abc" 34 ["users_ID"]=> 35 int(1) 36 } 37 } 38 ["error_info"]=> 39 array(5) { 40 ["$rows"]=> 41 bool(false) 42 ["last_query"]=> 43 string(34) "SHOW FULL COLUMNS FROM `wp_breads`" 44 ["last_error"]=> 45 string(0) "" 46 ["show_errors"]=> 47 bool(false) 48 ["hide_errors"]=> 49 bool(true) 50 } 51 } 52} 53</div>
他にエラーを検出する方法をご存じの方や、ざっとソースコードをご覧になりあやしい原因を特定できる方がいらしたらご高察賜れますと幸甚に存じます。
自力ではここまでが限界で…なにとぞ、お力添え宜しくお願い申し上げます。
あなたの回答
tips
プレビュー