2022-03-27 01:55:57 +09:00
< ? php
2022-03-27 02:41:32 +09:00
require_once ( '../config.php' );
/* val
*
* select => [ 'var1' , 'var2' ... ]
* insert | update | where => [ 'key1' => 'value1' , 'key2' => 'value2' ... ]
* order => [ 'var' , 'asc' | 'desc' ]
* limit => int
* */
function lolidb ( string $table , array $val , string $mode = 'select' ) : array | bool {
// モードは違う場合、やめる。If the mode is wrong, stop.
if ( $mode != 'select' && $mode != 'one' && $mode != 'insert' && $mode != 'update' && $mode != 'delete' ) {
dd ( " モードは「select」、「one」、「insert」、「update」、「delete」です。 \n Mode should be \" select \" , \" one \" , \" insert \" , \" update \" , or \" delete \" . " );
2022-03-27 01:55:57 +09:00
return false ;
}
2022-03-27 02:41:32 +09:00
// 順のチェック。Check order.
if ( isset ( $val [ 'order' ])) {
// selectかoneじゃない場合。If not select or one.
if ( $mode !== 'select' || $mode !== 'one' ) {
dd ( " 「order」は「select」又は「one」のみで使えます。 \n \" order \" can only be used with \" select \" or \" one \" . " );
2022-03-27 01:55:57 +09:00
return false ;
}
2022-03-27 02:41:32 +09:00
// 複数の場合。If multiple.
if ( count ( $val [ 'order' ] > 1 )) {
dd ( " 複数「order」は未対応です。 \n Multiple \" order \" is not yet supported. " );
return false ;
}
2022-03-27 01:55:57 +09:00
2022-03-27 02:41:32 +09:00
// ascかdescかどうか。Whether it's asc or desc.
foreach ( $val [ 'order' ] as $k => $v ) {
if ( $v !== 'asc' && $v !== 'desc' ) {
dd ( " 「order」は「asc」又は「desc」です。 \n \" order \" should be \" asc \" or \" desc \" . " );
return false ;
}
}
2022-03-27 01:55:57 +09:00
}
2022-03-27 02:41:32 +09:00
// 限界のチェック。Check limit.
if (( $mode === 'select' || $mode === 'one' ) && isset ( $val [ 'limit' ])) {
// oneの場合。If one.
if ( $mode === 'one' ) {
dd ( " 「one」の場合、「limit」はいつでも「1」です。「limit」は1以上は必要の場合、「select」を使って下さい。 \n In case of \" one \" , \" limit \" is always \" 1 \" . If \" limit \" needs to be more than \" 1 \" , please use \" select \" . " );
return false ;
2022-03-27 01:55:57 +09:00
}
2022-03-27 02:41:32 +09:00
// selectじゃない場合。If not select.
else if ( $mode !== 'select' ) {
dd ( " 「insert」、「update」及び「delete」で、「limit」を使えません。 \n \" limit \" cannot be used with \" insert \" , \" update \" , and \" delete \" . " );
return false ;
2022-03-27 01:55:57 +09:00
}
}
2022-03-27 02:41:32 +09:00
// insertの場合。In case of insert.
if ( $mode === 'insert' && ! isset ( $val [ 'insert' ])) {
dd ( " 「insert」モードの場合、「insert」値は必須です。 \n In case of \" insert \" mode, \" insert \" value is necessary. " );
return false ;
2022-03-27 01:55:57 +09:00
}
2022-03-27 02:41:32 +09:00
// updateの場合。In case of update.
if ( $mode === 'update' && ! isset ( $val [ 'update' ])) {
dd ( " 「update」モードの場合、「update」値は必須です。 \n In case of \" update \" mode, \" update \" value is necessary. " );
return false ;
2022-03-27 01:55:57 +09:00
}
2022-03-27 02:41:32 +09:00
// MySQLiの創作。Creation of MySQLi.
$mysqli = mysqli_connect ( DB_HOST , DB_USER , DB_PASS , DB_TABLE );
$result = null ;
if ( $mode == 'select' || $mode == 'one' ) {
// select値がなければ、全部を選択する。If there is no select value, select everything.
if ( ! isset ( $val [ 'select' ])) {
$val [ 'select' ] = [ '*' ];
2022-03-27 01:55:57 +09:00
}
2022-03-27 02:41:32 +09:00
$query = 'SELECT ' . $val [ 'select' ] . ' FROM ' . $table ;
2022-03-27 01:55:57 +09:00
if ( isset ( $val [ 'where' ])) {
$query .= ' WHERE ' ;
foreach ( $val [ 'where' ] as $k => $v ) {
$query .= $k . ' = ' . $v ;
if ( $k !== array_key_last ( $val [ 'where' ])) $query .= ' AND ' ;
}
}
2022-03-27 02:41:32 +09:00
if ( isset ( $val [ 'order' ])) {
$query .= ' ORDER BY ' ;
foreach ( $val [ 'order' ] as $k => $v ) {
$query .= $k ;
$query .= ' ' . strtoupper ( $v );
2022-03-27 01:55:57 +09:00
}
}
2022-03-27 02:41:32 +09:00
if ( $mode == 'one' ) {
$query .= ' LIMIT 1' ;
}
else {
if ( isset ( $val [ 'limit' ])) {
$query .= ' LIMIT ' . ( int ) $val [ 'limit' ];
}
}
2022-03-27 01:55:57 +09:00
2022-03-27 02:41:32 +09:00
$result = mysqli_query ( $mysqli , $query . ';' );
$row = mysqli_fetch_assoc ( $result );
}
else {
if ( $mode == 'insert' ) {
$query .= 'INSERT INTO ' . $table . ' (' ;
foreach ( $val [ 'insert' ] as $k => $v ) {
$query .= $k ;
if ( $k !== array_key_last ( $val [ 'insert' ])) {
$query .= ', ' ;
}
}
$query .= ') VALUES (' ;
foreach ( $val [ 'insert' ] as $k => $v ) {
$query .= $v ;
if ( $k !== array_key_last ( $val [ 'insert' ])) {
$query .= ', ' ;
}
}
$query .= ')' ;
}
else if ( $mode == 'update' ) {
$query .= 'UPDATE ' . $table . ' SET ' ;
foreach ( $val [ 'update' ] as $k => $v ) {
$query .= $k . ' = ' . $v ;
if ( $k !== array_key_last ( $val [ 'update' ])) {
$query .= ', ' ;
}
}
2022-03-27 01:55:57 +09:00
2022-03-27 02:41:32 +09:00
if ( isset ( $val [ 'where' ])) {
$query .= ' WHERE ' ;
foreach ( $val [ 'where' ] as $k => $v ) {
$query .= $k . ' = ' . $v ;
if ( $k !== array_key_last ( $val [ 'where' ])) {
$query .= ' AND ' ;
}
}
}
}
else if ( $mode == 'delete' ) {
$query .= 'DELETE FROM ' . $table ;
if ( isset ( $val [ 'where' ])) {
$query .= ' WHERE ' ;
foreach ( $val [ 'where' ] as $k => $v ) {
$query .= $k . ' = ' . $v ;
if ( $k !== array_key_last ( $val [ 'where' ])) {
$query .= ' AND ' ;
}
}
}
}
2022-03-27 01:55:57 +09:00
2022-03-27 02:41:32 +09:00
$stmt = mysqli_prepare ( $mysqli , $query . ';' );
}
2022-03-27 01:55:57 +09:00
2022-03-27 02:41:32 +09:00
return $row ;
2022-03-27 01:55:57 +09:00
}
?>