1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
<?php
/* -------------------------------------------------------------------------------------
* MySQLiのCRUDクラス:オブジェクト指向型:mysqliクラスを継承 [UTF-8]ベース
* 内容 :PHPプログラミング講義用:プリペアドステートメントのメソッドを追加
* ---------------------------
* 作者 :Yoshi of CXMedia Inc. - copyrights all rights reserved.
* 作成 :2016.07.01
* -------------------------------------------------------------------------------------
*/
class MySQLi_eCRUD extends mysqli {
/* ------------------ *
* -- プロパティ --
* ------------------ */
public $DBconnect; // DB接続のリソースID
public $DBresult; // クエリ結果セット
public $DBhost; // ホスト名
public $DBuser; // ユーザID
public $DBpwd; // パスワード
public $DBname; // データベース名
public $DBtblm; // テーブル名
public $DBrows; // クエリの結果内容
public $DBerror; // DBエラー内容
public $DBsql; // SQL文の保存
public $DBfields = array(); // テーブルのフィールド名
public $DBfieldType = array(); // テーブルのフィールド・データ型
public $DBfieldDaft = array(); // テーブルのフィールド・デフォルト値
public $DBkey_fld = "";
/* --------------------------------------------#
* データベース接続コンストラクタ
* @[define] データベースの接続の連想配列
* ------------------------------------------- */
public function __construct($define) {
// MySQLiを初期化し、mysqli_real_connect()で使用するリソースを返す
parent::init();
// オプション設定:MySQLサーバー接続後に実行するコマンド:オートコミットなし
if (!parent::options(MYSQLI_INIT_COMMAND, 'SET AUTOCOMMIT = 0')) {
die('設定エラー:MYSQLI_INIT_COMMAND');
}
// オプション:接続のタイムアウト秒数の設定
if (!parent::options(MYSQLI_OPT_CONNECT_TIMEOUT, 5)) {
die('設定エラー:MYSQLI_OPT_CONNECT_TIMEOUT');
}
// 接続条件の初期設定
$this->DBhost = isset($define['DBhost'])? $define['DBhost'] : 'localhost'; // ホスト名
$this->DBuser = isset($define['DBuser'])? $define['DBuser'] : 'root'; // ユーザー名
$this->DBpwd = isset($define['DBpwd'])? $define['DBpwd'] : 'admin'; // パスワード
$this->DBname = isset($define['DBname'])? $define['DBname'] : ''; // データベース名
$this->DBtblm = isset($define['DBtblm'])? $define['DBtblm'] : ''; // DBテーブル名
$this->DBrows = 0; // クエリ結果のレコード
// MYSQLへ接続
$this->DBconnect = parent::real_connect($this->DBhost,$this->DBuser,$this->DBpwd,$this->DBname);
// MySQLサーバー接続をオープン
if ( parent::real_connect($this->DBhost, $this->DBuser, $this->DBpwd, $this->DBname) ) {
// データベースの接続
$this->DBconnect = @ mysqli_connect($this->DBhost,$this->DBuser,$this->DBpwd,$this->DBname);
} else {
die('MySQLi接続エラー ('.mysqli_connect_errno().') '.mysqli_connect_error());
}
// DBのテーブル名によるフィールド名、型、値のプロパティ設定
if( $this->DBtblm ){
self::set_tablefields($this->DBtblm);
}
}
/* --------------------- *
* -- デストラクタ --
* --------------------- */
public function __destruct(){
// MySQL接続終了
self::Close();
}
/* ----------------------------------#
* 主テーブル、フィールド名設定
* @[table] DBのテーブル名
* @戻り値 OK:true/エラー:false
* --------------------------------- */
public function set_tablefields($table = null){
// $tableの引数が設定されていた場合は、メインのテーブルセットをする
if($table){
$this->DBtblm = $table;
}
// 指定したテーブルのフィールド型、デフォルトをセット
if($this->DBtblm){
$this->DBfields = array();
// フィールド属性取得のsql文
$sql = 'show columns from '.$this->DBtblm;
// クエリの実行
$this->Query($sql);
// クエリ結果の取得(繰り返し)
while ($item = $this->Fetch()){
$this->DBfields[] = $item['Field'];
$this->DBfieldType[ $item['Field'] ] = $item['Type'];
$this->DBfieldDaft[ $item['Field'] ] = $item['Default'];
// キーフィールドが'PRI'であるとき、キーフィールド名としてセット
if($item['Key'] == 'PRI'){$this->DBkey_fld = $item['Field'];}
}
return true;
} else {
return false;
}
}
/* ------------------ *
* -- メソッド --
* ------------------ */
/* -------------------------------------------------------------#
* SQLクエリの処理
* @[sql] クエリ文
* @[mode] 'あり':MYSQLI_USE_RESULT,'なし':MYSQLI_STORE_RESULT
* @戻り値 OK:クエリ結果/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------ */
public function Query($sql,$mode=null){
// MYSQLI_USE_RESULT 又は MYSQLI_STORE_RESULT(デフォルト)を指定
// MYSQLI_USE_RESULT を使用すると、 mysqli_free_result() をコールするまでは
// それ以降のコールはすべて Commands out of sync エラーを返す。
$mode = ($mode)? MYSQLI_USE_RESULT : MYSQLI_STORE_RESULT;
$this->DBresult = $this->DBconnect->query($sql,$mode);
// sql文のエラー判断
if (!$this->DBresult){
$this->DBerror = "MySQLでエラーが発生<br><b>{$sql}</b><br>".$this->errors();
return false;
}
return $this->DBresult;
}
/* -------------------------------------------------------------#
* プリペアドステートメントprepare + bind_param + execute 処理
* @[sql] クエリ文
* @[ary] バインド対象項目
* @戻り値 OK:true/エラー:false
* ------------------------------------------------------------ */
public function PrepareExec($sql,$ary){
// prepareの実行
if(!$this->Prepare($sql) ){ return false; }
// bind_paramの実行
if(!$this->BindParam($ary) ){ return false; }
// executeの実行
if(!$this->Execute() ){ return false; }
return true;
}
/* ------------------------------------------------------------------------#
* プリペアドステートメントprepare + bind_param + execute + bind_result処理
* mysqli_resultクラスとしてfetch処理が可能(-- PHP5.3以降 --)
* @[sql] クエリ文
* @[ary] バインド対象項目
* @戻り値 OK:true/エラー:false
* ----------------------------------------------------------------------- */
public function PrepareExecResult($sql,$ary){
// prepareの実行
if(!$this->Prepare($sql) ){ return false; }
// bind_paramの実行
if(!$this->BindParam($ary) ){ return false; }
// executeの実行
if(!$this->Execute() ){ return false; }
// プリペアドステートメントから結果セットを取得
// bind_resultの実行
if(!$this->BindResult($outary) ){ return false; }
return true;
}
/* ------------------------------------------------------------------------#
* プリペアドステートメントprepare + bind_param + execute + get_result処理
* mysqli_resultクラスとしてfetch処理が可能(-- PHP5.3以降 --)
* @[sql] クエリ文
* @[ary] バインド対象項目
* @戻り値 OK:true/エラー:false
* ----------------------------------------------------------------------- */
public function PrepareExecGetResult($sql,$ary){
// prepareの実行
if(!$stmt = $this->Prepare($sql) ){ return false; }
// bind_paramの実行
if(!$this->BindParam($ary) ){ return false; }
// executeの実行
if(!$this->Execute() ){ return false; }
// プリペアドステートメントから結果セットを取得
// $this->DBresultのmysqli_resultクラスとして扱う(PHP5.3以降)
if(!$this->DBresult = $stmt->get_result() ){ return false; }
return true;
}
/* -----------------------------------------------------------------#
* プリペアドステートメントとしてfetch()処理が可能
* prepare + bind_param + execute + bind_result + store_result処理
* @[sql] クエリ文
* @[ary] バインド対象項目
* @[outary] バインド結果の保存連想配列:参照渡し
* @戻り値 OK:true/エラー:false
* ---------------------------------------------------------------- */
public function PrepareExecStore($sql,$ary,&$outary){
// prepareの実行
if(!$stmt = $this->Prepare($sql) ){ return false; }
// bind_paramの実行
if(!$this->BindParam($ary) ){ return false; }
// executeの実行
if(!$this->Execute() ){ return false; }
// プリペアドステートメントから結果をバッファに保存
if(!$this->DBresult->store_result() ){ return false; }
// bind_resultの実行
if(!$this->BindResult($outary) ){ return false; }
return true;
}
/* --------------------------------------------------------------------#
* query検索結果を配列fetch
* レコード取得メソッド(連想配列と添字配列の両方)
* @[mode] 'assoc':MYSQLI_ASSOC,'num':MYSQLI_NUM,'他なし':MYSQLI_BOTH
* @戻り値 OK:取得レコード/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------------- */
public function Fetch($mode=null){
if(!$this->DBresult){
$this->DBerror = "MySQLエラー:レコードリソースIDなし<br>" .$this->errors();
return false;
}
// --[mode]--
$mode = ($mode == 'assoc')? MYSQLI_ASSOC : (($mode == 'num')? MYSQLI_NUM : MYSQLI_BOTH);
return $this->DBrows = $this->DBresult->fetch_array($mode);
}
/* --------------------------------------------------------------------#
* プリペアドステートメントから結果を取得し、バインド変数に格納
* @戻り値 OK:取得レコード/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------------- */
public function FetchStmt(){
if(!$this->DBresult){
$this->DBerror = "MySQLエラー:レコードリソースIDなし<br>" .$this->errors();
return false;
}
return $this->DBrows = $this->DBresult->fetch();
}
/* -------------------------------------------------------------------#
* query検索結果を連想配列fetch レコード取得メソッド(連想配列のみ)
* @戻り値 OK:取得レコード/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------------ */
public function FetchAssoc(){
if(!$this->DBresult){
$this->DBerror = "MySQLエラー:レコードリソースIDなし<br>" .$this->errors();
return false;
}
return $this->DBrows = $this->DBresult->fetch_assoc();
}
/* ----------------------------------------------------------------------#
* prepare 処理
* @[sql] クエリ文
* @戻り値 OK:STMTオブジェクト/エラー:false(エラーメッセージのセット)
* --------------------------------------------------------------------- */
public function Prepare($sql){
if( $this->DBresult = $this->DBconnect->prepare($sql) ){
$this->DBsql = $sql;
return $this->DBresult;
} else {
//prepareエラー
$this->DBerror = "MySQL prepareエラー:{$sql}<br>".$this->errors();
return false;
}
}
/* -------------------------------------------------------------------------------#
* バインドパラメータの準備 + 項目のreal_escape_string処理
* @[ary] バインド対象項目(連想配列形式)
* @戻り値 「i:integer,d:double,s:string,b:blob」項目対応値の文字列/エラー:false
* ------------------------------------------------------------------------------ */
public function BindParamType($ary){
if( $this->DBresult ){
// バインドパラメータの作成
$b_param = '';
$mark_cnt = '';
foreach($ary as $key=>$value){
$wk_str = $this->DBfieldType[ $key ];
// データ型からパラメータ値の追加
$b_param .= $this->_param_type($wk_str);
$mark_cnt++;
}
// '?'マークカウントの数値が一致しているかのチェック
if($mark_cnt != $this->DBresult->param_count){
$this->DBerror = "MySQLマークカウントエラー {$mark_cnt}:{$this->DBsql}<br>".$this->errors();
return false;
}
// $this->_escape_string($ary); //※バインド対象データのescape処理は不要
return $b_param;
} else {
//prepareエラー
$this->DBerror = "mysqli_stmtクラスの未設定エラー:{$this->DBsql}<br>".$this->errors();
return false;
}
}
/* ---------------------------------------------------------------------#
* バインドパラメータのセット処理:入力のバインド配列順に作成(要注意)
* @[ary] バインド対象項目(連想配列形式)から参照渡しでescapeセット
* @戻り値 OK:true/エラー:false
* -------------------------------------------------------------------- */
public function BindParam(&$ary){
if( $this->DBresult ){
$param_ary = array();
// 可変変数項目のバインドパラメータの作成
if( !$param_ary[0] = $this->BindParamType($ary) ){
return false;
}
// 可変変数項目の配列作成
foreach($ary as $key=>$value){
$param_ary[$key] = & $ary[$key];
}
call_user_func_array( array($this->DBresult,"bind_param"), $param_ary );
return true;
} else {
//prepareエラー
$this->DBerror = "mysqli_stmtクラスの未設定エラー:{$this->DBsql}<br>".$this->errors();
return false;
}
}
/* ----------------------------------------------------------------#
* プリペアドステートメントに変数をバインドして結果を保存処理
* @[ary] バインド対象項目(連想配列形式)から参照渡し
* @戻り値 OK:true/エラー:false(エラーメッセージのセット)
* --------------------------------------------------------------- */
public function BindResult(&$ary){
if( $this->DBresult ){
// 可変変数項目
$param_ary = array();
// プリペアドステートメントから結果セットのメタデータのオブジェクト
$meta = $this->DBresult->result_metadata();
// メタデータのカラムのフィールド情報を取得
while($field = $meta->fetch_field()){
$param_ary[] = &$ary[$field->name]; //name:カラムの名前をレファレンス化
}
// call_user_func_array「class名→その中の関数(メソッド),処理したい配列」
call_user_func_array( array($this->DBresult ,"bind_result"), $param_ary );
return true;
} else {
//prepareエラー
$this->DBerror = "mysqli_stmtクラスの未設定エラー:{$this->DBsql}<br>".$this->errors();
return false;
}
}
/* -------------------------------------------------------------#
* execute 処理
* @戻り値 OK:true/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------ */
public function Execute(){
if( $this->DBresult ){
// クエリを実行
if( !$this->DBresult->execute() ){
$this->DBerror = "MySQL executeエラー:{$this->DBsql}<br>".$this->errors();
return false;
}
return true;
} else {
//prepareエラー
$this->DBerror = "mysqli_stmtクラスの未設定エラー:{$this->DBsql}<br>".$this->errors();
return false;
}
}
/* ---------------- MySQLi CRUD ------------------- */
/* --------------------------------------------------------------------------#
* レコードの追加: INSERT INTO table [(filed)] VALUES( $data )
* @$data : 削除したい値(連想配列)
* @$mode : 'edit'指定は、選択項目のみの挿入(省略値:全対象フィールド)
* @戻り値 : OK:true/エラー:false
* ------------------------------------------------------------------------- */
public function Insert($data,$mode=null){
// 選択項目のみの文字列用クリア
$field_str = '';
// フィールド名の配列セット
$dbfiled_ary = $this->DBfields;
// 選択項目のみ(editモード)のinsertのとき、filed名のコンマ区切りの文字列作成
if($mode == 'edit'){
$dbfiled_ary = array_keys($data);
// コンマで区分けしたstringの変換
$field_str = ' ('.implode(",",$dbfiled_ary).') ';
}
// SQL文作成:プリペアドステートメントマーク『?』作成
$sql = "INSERT INTO ".$this->DBtblm.$field_str." VALUES(".$this->_preparedMark($data).')';
// プリペアドステートメントprepare + bind_param + execute 処理
if(!$this->PrepareExec($sql,$data)){ return false; }
return true;
}
/* -----------------------------------------------------------------------#
* レコードの変更:UPDATE table SET $dataの項目名 WHERE [ $key ]=$data
* @$data : 変更したい値(連想配列)
* @$key : 変更のキーフィールド名(省略値:PRIキー)
* @$mode : 'edit'指定は、入力フィールドのみ(省略値:全対象フィールド)
* @戻り値 : OK:true/エラー:false
* ---------------------------------------------------------------------- */
public function Update($data,$key=null,$mode=null){
// 変更対象キーフィールド名のセット
$wk_key = ($key)? $key : $this->DBkey_fld;
// バインド順に連想配列を並び替え
$wk_data = array();
// SQL文作成:プリペアドステートメントマーク『?』作成
$sql = "UPDATE ".$this->DBtblm." SET ";
$wk_wheresql = "";
foreach ($this->DBfields as $fld_key){
// 検索対象のキーフィールド判定
if($fld_key == $wk_key){
$wk_wheresql = ' WHERE '.$wk_key." = ?";
}
// プライマリーキーの場合は、更新スキップ
elseif($fld_key == $this->DBkey_fld){
continue;
}
// editモードの時、データがない状態はフィールド更新の対象外とする
elseif($mode == 'edit' && !isset($data[$fld_key]) ){
continue;
}
else {
$sql .= $fld_key." = ?,";
$wk_data[$fld_key] = $data[$fld_key];
}
}
// 'where ...'以降をSQL文に追加
$sql = rtrim( $sql,"," );
$sql .= $wk_wheresql;
// バインド順に連想配列を並び替え
$wk_data[$wk_key] = $data[$wk_key];
// プリペアドステートメントprepare + bind_param + execute 処理
if(!$this->PrepareExec($sql,$wk_data)){ return false; }
return true;
}
/* ---------------------------------------------------------------#
* レコードの削除: DELETE FROM table [ WHERE pri_key=$str ]
* @$str : 削除のプライマリキーの値(省略値:全レコードの削除)
* @戻り値 : OK:true/エラー:false
* -------------------------------------------------------------- */
public function Delete($str=null){
if(!$str){
// 削除キーがない場合は、全レコードの削除
// SQL文作成
$sql = "DELETE FROM ".$this->DBtblm;
// クエリの実行
return $this->Query($sql);
}
// 引数の指定がある場合は、キー値のレコード削除
// SQL文作成
$sql = "DELETE FROM ".$this->DBtblm." WHERE ".$this->DBkey_fld."=?";
$data = array($this->DBkey_fld => $str);
// プリペアドステートメントprepare + bind_param + execute 処理
if(!$this->PrepareExec($sql,$data)){ return false; }
return true;
}
/* -----------------------------------------------------------#
* レコードの検索: SELECT * from table WHERE [$key] [option]
* @$str : 検索したい値
* @$out_data: 検索結果のデータ(連想配列の参照渡しで出力)
* @$key : フィールド名(省略値:PRIキー)
* @$option : SELECT文のgroup,order by,having句他の付加
* @戻り値 : OK:true/エラー:false
* ---------------------------------------------------------- */
public function Search($str,&$out_data,$key=null,$option=null){
// 検索キーのセット
$wk_key = ($key)? $key : $this->DBkey_fld;
// SQL文作成
$sql = "SELECT * FROM ".$this->DBtblm." WHERE ".$wk_key."=?";
// 排他制御(FOR UPDATE)、共有(LOCK IN SHARE MODE)のモード指定などの設定が可能
if($option){
$sql .= " $option";
}
// 検索対象の配列設定
$data = array( $wk_key => $str);
// プリペアドステートメントのresult連想配列の設定
$outary = $this->DBfieldDaft;
// 連想配列のキーのみの配列作成
$wk_key_ary = array_keys($outary);
// 「prepare + bind_param + execute + bind_result + store_result」処理
if(!$this->PrepareExecStore($sql,$data,$outary)){ return false; }
// SELECT文の結果を読み出しとメモリー
$wk_data = array();
while( $this->FetchStmt() ){
//【注意】通常の配列追加の代入では、最終レコードのみの配列が保存されるため文字列で保存
$wk_data[] = implode("\t",$outary);
}
// 配列の文字列データを分解して、連想配列の作成(array_combine)
$out_data = array();
foreach($wk_data as $str){
$wk_value_ary = explode("\t",$str);
$out_data[] = array_combine($wk_key_ary,$wk_value_ary);
}
// echo '<pre>'; print_r($out_data); echo '</pre>';
return true;
}
/* ------------------------------------------------#
* 直近の INSERT 操作で生成したIDを取得
* @戻り値 : OK:取得ID/エラー:エラーメッセージ
* ----------------------------------------------- */
public function InsertID(){
if( !$this->DBresult ){return 'ERROR:SMTオブジェクトがありません。';}
return $this->DBresult->insert_id;
}
/* ---------------- MySQLi CRUD END ------------------- */
/* --------------------------------------------------------------#
* ROWの件数カウント
* @戻り値 OK:取得件数/エラー:false(エラーメッセージのセット)
* ------------------------------------------------------------- */
public function Rowcount(){
if(!$this->DBresult){
$this->DBerror = "MySQLエラー:レコードリソースIDなし。<br>" .$this->errors();
return false;
}
return $this->DBresult->num_rows;
}
/* ---------------------------------------------#
* MySQLをクローズ
* @戻り値 OK:true/エラー:false
* -------------------------------------------- */
/* 持続的でない MySQL接続や結果セットは、PHPスクリプトの実行が終了する時点で
* 自動的に破棄され、オープン接続のクローズ、結果セット開放は、必須でないが、
* DBクローズは、PHPやMySQLにリソースを返し、パフォーマンスの向上が図れる */
public function Close(){
// DBの接続状態の判断
if(isset($this->DBconnect) && $this->DBconnect){
$wk_jdg = $this->DBconnect->close();
// 接続リソースのクリア
$this->DBconnect = '';
return $wk_jdg;
}
return false;
}
/* ---------------------------#
* エラーメッセージ
* @戻り値 エラーメッセージ
* -------------------------- */
public function errors(){
if( $this->DBconnect && $this->DBconnect->connect_errno ){
return $this->DBconnect->connect_errno.": ".$this->DBconnect->connect_error;
}
elseif( $this->DBconnect && $this->DBconnect->errno ){
return $this->DBconnect->errno.": ".$this->DBconnect->error;
}
else{
return 'MySQL ERROR:';
}
}
/* -----------------------------------------------------#
* SUB:プリペアドステートメントマーク『?』作成処理
* @[ary] 対象のフィールド名の連想配列
* @戻り値:生成した文字列
* ---------------------------------------------------- */
private function _preparedMark(&$ary){
$storedmark = str_repeat('?,',count($ary));
return rtrim($storedmark,",");
}
/* -----------------------------------------------------#
* SUB:文字列のクオート処理
* @[ary] 対象のフィールド名をキーとした連想配列
* @戻り値:quoteした参照渡し配列
* ---------------------------------------------------- */
private function _quote(&$ary){
foreach($ary as $key => $value){
$ary[$key] = "'".$value."'";
}
}
/* -----------------------------------------------------#
* SUB:文字列のエスケープ処理
* @[ary] 対象のフィールド名をキーとした連想配列
* @戻り値:real_escape_stringした参照渡し配列
* ---------------------------------------------------- */
private function _escape_string(&$ary){
foreach($ary as $key => $value){
$ary[$key] = mysqli_real_escape_string($this->DBconnect,$value);
}
}
/* ---------------------------------------------------------#
* SUB:DBフィールドの型から、バインドのパラメータの抽出
* @[str] DBフィールドの型
* @戻り値:バインドのパラメータの文字列
* -------------------------------------------------------- */
private function _param_type($str){
$str = preg_replace("/\(\d.*\)/",'',$str);
$out_str = '';
// integer
if( preg_match("/int/i",$str) ){
$out_str = 'i';
}
// string
elseif( preg_match("/(?:char|varchar|text|date|time|year)/i",$str) ){
$out_str = 's';
}
// double
elseif( preg_match("/(?:float|double|real|bit)/i",$str) ){
$out_str = 'd';
}
// blob
elseif( preg_match("/(?:blob|binary)/i",$str) ){
$out_str = 'b';
}
return $out_str;
}
}