LoliPHP/helper/db.php

165 行
5.4 KiB
PHP
Raw 通常表示 履歴

2022-03-27 01:55:57 +09:00
<?php
2022-10-25 18:09:58 +09:00
require_once("../config.php");
2022-03-27 02:41:32 +09:00
/* val
*
2022-10-25 18:09:58 +09:00
* select => ["var1", "var2"...]
* insert|update|where => ["key1" => "value1", "key2" => "value2"...]
* order => ["var", "asc"|"desc"]
2022-03-27 02:41:32 +09:00
* limit => int
* */
2022-10-25 18:09:58 +09:00
function lolidb (string $table, array $val, string $mode="select"): array|bool {
2022-03-27 02:41:32 +09:00
// モードは違う場合、やめる。If the mode is wrong, stop.
2022-10-25 18:09:58 +09:00
if ($mode != "select" && $mode != "one" && $mode != "insert" && $mode != "update" && $mode != "delete") {
2022-03-27 02:41:32 +09:00
dd("モードは「select」、「one」、「insert」、「update」、「delete」です。\nMode 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.
2022-10-25 18:09:58 +09:00
if (isset($val["order"])) {
2022-03-27 02:41:32 +09:00
// selectかoneじゃない場合。If not select or one.
2022-10-25 18:09:58 +09:00
if ($mode !== "select" || $mode !== "one") {
2022-03-27 02:41:32 +09:00
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.
2022-10-25 18:09:58 +09:00
if (count($val["order"] > 1)) {
2022-03-27 02:41:32 +09:00
dd("複数「order」は未対応です。\nMultiple \"order\" is not yet supported.");
return false;
}
2022-03-27 01:55:57 +09:00
2022-10-25 18:09:58 +09:00
// ascかdescかどうか。Whether it"s asc or desc.
foreach ($val["order"] as $k => $v) {
if ($v !== "asc" && $v !== "desc") {
2022-03-27 02:41:32 +09:00
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.
2022-10-25 18:09:58 +09:00
if (($mode === "select" || $mode === "one") && isset($val["limit"])) {
2022-03-27 02:41:32 +09:00
// oneの場合。If one.
2022-10-25 18:09:58 +09:00
if ($mode === "one") {
2022-03-27 02:41:32 +09:00
dd("「one」の場合、「limit」はいつでも「1」です。「limit」は1以上は必要の場合、「select」を使って下さい。\nIn 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.
2022-10-25 18:09:58 +09:00
else if ($mode !== "select") {
2022-03-27 02:41:32 +09:00
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.
2022-10-25 18:09:58 +09:00
if ($mode === "insert" && !isset($val["insert"])) {
2022-03-27 02:41:32 +09:00
dd("「insert」モードの場合、「insert」値は必須です。\nIn 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.
2022-10-25 18:09:58 +09:00
if ($mode === "update" && !isset($val["update"])) {
2022-03-27 02:41:32 +09:00
dd("「update」モードの場合、「update」値は必須です。\nIn 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;
2022-10-25 18:09:58 +09:00
if ($mode == "select" || $mode == "one") {
2022-03-27 02:41:32 +09:00
// select値がなければ、全部を選択する。If there is no select value, select everything.
2022-10-25 18:09:58 +09:00
if (!isset($val["select"])) {
$val["select"] = ["*"];
2022-03-27 01:55:57 +09:00
}
2022-10-25 18:09:58 +09:00
$query = "SELECT ".$val["select"]." FROM ".$table;
2022-03-27 02:41:32 +09:00
2022-10-25 18:09:58 +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 01:55:57 +09:00
}
}
2022-10-25 18:09:58 +09:00
if (isset($val["order"])) {
$query .= " ORDER BY ";
foreach ($val["order"] as $k => $v) {
2022-03-27 02:41:32 +09:00
$query .= $k;
2022-10-25 18:09:58 +09:00
$query .= " ".strtoupper($v);
2022-03-27 01:55:57 +09:00
}
}
2022-10-25 18:09:58 +09:00
if ($mode == "one") {
$query .= " LIMIT 1";
2022-03-27 02:41:32 +09:00
}
else {
2022-10-25 18:09:58 +09:00
if (isset($val["limit"])) {
$query .= " LIMIT ".(int)$val["limit"];
2022-03-27 02:41:32 +09:00
}
}
2022-03-27 01:55:57 +09:00
2022-10-25 18:09:58 +09:00
$result = mysqli_query($mysqli, $query.";");
2022-03-27 02:41:32 +09:00
$row = mysqli_fetch_assoc($result);
}
else {
2022-10-25 18:09:58 +09:00
if ($mode == "insert") {
$query .= "INSERT INTO ".$table." (";
foreach ($val["insert"] as $k => $v) {
2022-03-27 02:41:32 +09:00
$query .= $k;
2022-10-25 18:09:58 +09:00
if ($k !== array_key_last($val["insert"])) {
$query .= ", ";
2022-03-27 02:41:32 +09:00
}
}
2022-10-25 18:09:58 +09:00
$query .= ") VALUES (";
foreach ($val["insert"] as $k => $v) {
2022-03-27 02:41:32 +09:00
$query .= $v;
2022-10-25 18:09:58 +09:00
if ($k !== array_key_last($val["insert"])) {
$query .= ", ";
2022-03-27 02:41:32 +09:00
}
}
2022-10-25 18:09:58 +09:00
$query .= ")";
2022-03-27 02:41:32 +09:00
}
2022-10-25 18:09:58 +09:00
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 02:41:32 +09:00
}
}
2022-03-27 01:55:57 +09:00
2022-10-25 18:09:58 +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
}
}
}
}
2022-10-25 18:09:58 +09:00
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 02:41:32 +09:00
}
}
}
}
2022-03-27 01:55:57 +09:00
2022-10-25 18:09:58 +09:00
$stmt = mysqli_prepare($mysqli, $query.";");
2022-03-27 02:41:32 +09:00
}
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
}
?>