вызывать конкретный запрос только из файла всех запросов - PullRequest
0 голосов
/ 04 октября 2019

я делаю сайт php. Есть тонны запросов, поэтому я решил поместить их все в отдельный файл и выполнить то, что мне нужно в данный момент.

Мне нужен способ вызова оператора, чтобы только этот оператор вызывался, а не весьфайл. я использовал require_once, чтобы включить этот файл в каждую страницу, и поэтому я могу вызвать stmt2->execute();или любой другой stmt для выполнения, но это вызвало проблему, которая в любом случае, если этот allstmts.php файл содержит фатальную ошибку, он показывается на каждой странице, потому что этот файл включен в него с помощью require_once

howя могу это остановить? и вызывать только запрос, а не весь файл на каждой странице, может ли #define работать в этом случае?

file: allstmts.php

$stmt2 = $con->prepare("INSERT INTO `$database`.`$mem` (`parent_id`, `placedby`, `name`, `dob`, `sex`, `username`, `email`, `mob`, `pass`, `jointime`, `plan`, `rank`, `cloud`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");
$stmt2->bind_param("iisssssssssss", 2, $parent_id, $name, $dob, $sex, $username, $email, $mob, $pass, date('Y-m-d H:i:s'), $plan, 'mitra', $newfile);

В приведенном выше файле stmt3, stmt4, stmt5 и т. Д. И т. Д. Есть еще несколько запросов

Ответы [ 3 ]

2 голосов
/ 04 октября 2019

Я решил поместить их все в отдельный файл

Так что теперь вы можете сказать, что это был действительно плохой ход .

Это похоже на две машины в гараже, но по какой-то причине колеса отсоединены и хранятся в другом месте. Да, это много колес, но колесо принадлежит его автомобилю, а не его виду. Все ваши запросы относятся к их модулю, а не к их виду.

Пожалуйста, демонтируйте этот файл sql monster и поместите все запросы там, где они принадлежат.

И в любом случае вы не должны никогда не подготавливать все запросы сразу . Это заставит ваш сайт работать медленно и перегружает вашу базу данных. Подготовьте только запрос, который будет выполнен.

0 голосов
/ 04 октября 2019

Я предлагаю вам использовать ORM как eloquent для проекта, пока не стало слишком поздно, и вы не можете понять, что находится где. но это ваше решение:

<?php
define( 'DB_NAME' , 'ciw' );
define( 'DB_USER' , 'root' );
define( 'DB_PASSWORD' , 'root' );
define( 'DB_HOST' , 'localhost' );
define( 'DB_CHARSET' , 'utf8' );

// Create connection to database using PDO
global $connection, $lastQuery;
try 
{
    #$connection = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);

    $connection = new PDO( "mysql:host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET, DB_USER, DB_PASSWORD );
//    var_dump ($connection);

    // Set PDO error mode to exception:
    $connection->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//    echo "Conneted to DB Successfully";
}
catch( PDOException $e)
{
    echo "Connection failed: " .$e->getMessage();
}

затем создайте файл functions.php для размещения ваших вспомогательных функций:

function sql_runner( $sql , $inputs = [] )
{
    global $connection , $lastQuery;

    try {

        $lastQuery = $connection -> prepare( $sql );
        $lastQuery -> execute( $inputs );
        return $lastQuery;


    } catch( PDOException $e ) {
        echo "Connection failed: " . $e -> getMessage();
    }
}

, затем нужно выбрать и выбрать все функции, как следует:

function sql_runner_fetch( $sql , $inputs = [] )
{
    return sql_runner( $sql , $inputs ) -> fetch( PDO::FETCH_ASSOC );
}
function sql_runner_fetch_all( $sql , $inputs = [] )
{
    return sql_runner( $sql , $inputs ) -> fetchAll( PDO::FETCH_ASSOC );
}

если вам нужно посчитать строки:

function sql_runner_rowCount( $count = -1 )
{
    global $lastQuery;
    try {
        if( $count == -1 ) {
            return $lastQuery -> rowCount();
        }
        return $lastQuery -> rowCount() == $count;
    } catch( PDOException $e ) {
        echo "Connection failed: " . $e -> getMessage();
    }

}

получить идентификатор последнего запроса:

function lastInsertedID()
{
    global $connection;
    return $connection -> lastInsertId();
}

проверить, является ли он уникальным:

function is_unique( $table , $column , $value )
{
    $sql = "SELECT * FROM `$table` WHERE `$column` = ?";
    sql_runner_fetch_all( $sql , [ $value ] );

    if( sql_runner_rowCount( 0 ) ) {
        return true;
    }
}

Я надеюсь, вы понимаете, как добавлять свои собственные функции.

всякий раз, когда вам нужно вызвать запрос, просто сделайте это:

$stmt = " SELECT *,`users`.`id` AS `users_id` FROM  `users`";
$users = sql_runner_fetch_all($stmt);

вы можете обрабатывать операторы с помощьюфайл построителя выписок. но это просто рабочий путь, а не правильный.

0 голосов
/ 04 октября 2019

Я бы рекомендовал создать Class с public static function для каждого запроса и вызывать его, когда это необходимо.

Или использовать SQL helper, как я использую SafeSQL

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