MySQLi-оболочка для готовых операторов - PullRequest
0 голосов
/ 03 ноября 2019

Я давно использую класс-оболочку для своих функций базы данных. Несколько лет назад я обновил его, чтобы использовать mysqli_ вместо устаревших функций mysql_, которые сделали веб-сайт совершенным преступлением во время обновлений версии PHP.

С более недавним обновлением моей оболочки я написал класс дляподготовьте statemtnts из мульти-массива, чтобы сделать вещи немного аккуратнее.

Я так и сделал.

index.php - Файл тестирования

/* Set Parameters
    i - integer
    d - double
    s - string
    b - BLOB
 */
 $params = array(
    array('s' => $_GET["id"]),
    array('i' => $_GET["two"])
 );

 $db->prepare("INSERT INTO `".$db->prefix."articles` SET `categoryID`= ? , `articleID`= ? ");
 $select2 = $db->execute($params);
 $db->close();     

Вы также можете сбросить массив $params с другим набором данных и еще раз $db->execute($params), чтобы вставить другую строку.

database.class.php

function prepare($sql) {
    $this->last_query = $sql; //Save query to show later on.
    $this->stmt = $this->conn->prepare($sql);
}

function close() {
    $this->stmt->close();
}

function execute($params) {
    $ident = '';
    $parameters = '';
    $vars = array();
    if($this->stmt) {
        foreach($params as $k => $v) {
            foreach($v as $a => $b) {
                $ident  .= $a;
                $vars[] .= $b;
                $parameters .= $a.' => '.$b.'<br>'; // For MySQL error reporting
            }
        }
        $this->stmt->bind_param( $ident , ...$vars );
        $this->parameters = $parameters;
        $this->stmt->execute();
        $result = $this->stmt->get_result();
        return $result;
    }
    else {
        if($this->conn->error) {
            $this->last_error = $this->conn->error;
            $sql = trim(preg_replace('/\s+/', ' ', $sql));
            $this->log_error("MySQL",$this->last_error." ☼ ".$sql);
        }
    }
    //$data = $result->fetch_all();
}

Мои вопросы:

  1. Замедлит ли это каким-либо образом?

  2. Может кто-нибудьпридумать лучшее решение и держать его в чистоте? Мне нравится аккуратность размещения информации в массиве;не говорю, что это лучшее решение, но оно работает. Я не нашел хорошего решения, чтобы все было организованно.

  3. Видите ли вы какие-либо недостатки этого маршрута?

Веб-сайт Iвсе будет работать на PHP 7.0 (или, по крайней мере, на PHP 5.7, пока я не смогу обновить их до более новой версии).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...