Функция mysqli select с параметрами массива

122
9

Я хочу создать функцию, в которой ввод представляет собой два массива. Один для полей и один для таблиц.

public function s($fields = array(), $tables = array()) { }

но я понятия не имею, как отсюда. У меня возникла идея перебирать два массива и сохранять каждое значение в такой строке (но для меня это не лучший способ сделать это):

$length = count($fields);
$fieldsString = "";

for ($i = 0; $i < $length; $i++) {
$fieldsString += $fields[$i];
}

затем сделать то же самое в $ tables и вывести $ fieldsString и $ tablesString в SQL-запрос.

Мой вопрос: можно ли это сделать более эффективным способом?

EDIT Я знаю, как сделать это с for-loop и получить результат, который я хочу. Но я ищу более "профессиональный" способ справиться с этой проблемой, чтобы учиться на этом.

спросил(а) 2021-01-19T17:25:36+03:00 2 месяца, 3 недели назад
1
Решение
75

Вместо того, чтобы перебирать весь массив, вы также можете использовать implode() для создания строки, содержащей все элементы массива:

$ieldsString = implode(',' , $fields);

http://php.net/manual/de/function.implode.php

ответил(а) 2021-01-19T17:25:36+03:00 2 месяца, 3 недели назад
62

Подход ООП:

Сначала я просто скажу, что ООП - это нечто большее, чем просто один класс в коде. Это концепция, которая позволяет нам думать в большем масштабе и создает гораздо больше функциональности в нашем коде.

Я создал класс DBHandler, который будет обрабатывать все мои запросы БД, что так всегда, поэтому лучше сохранить это в отдельном файле даже в более высоком иерархическом каталоге.

Так выглядит класс:

<?php
class DBHandler{

public $dbCon;

function __construct(mysqli $dbCon){
$this->dbCon = $dbCon;
}

private function createQuery($parameters, $tables){

$params = implode(',', $parameters);

$tParam = implode(',',$tables);

return "SELECT $params FROM $tParam";

}

public function query($dbCon, $parameters, $tables){

$query = createQuery($parameters, $tables);
$result =$this->dbCon->query($query);
return $result;
}
}
?>

И так должно выглядеть ваше главное:

<?php
$myownDB = new DBHandler($dbCon);

$myownDB->query($parameters, $tables);
?>

Этот способ является более удобным. и я действительно предлагаю использовать его. Легче отделить обработчик базы данных от вашего фактического кода, поэтому он не станет беспорядочным. Обратите внимание, что этот вызов $myownDB->query($parameters, $tables); будет запускать запрос мгновенно и не будет echo его.

Процедурное программирование:

<?php
function s($parameters){

$i = 0;
$addtoQuery ='';
for($i =0; $i<count($parameters); $i++){

$addtoQuery .= $parameters[$i].',';

}
return substr($addtoQuery, 0, -1);

}
function t($tables){

$i = 0;
$addtoQuery ='';
for($i =0; $i<count($tables); $i++){

$addtoQuery .= $tables[$i].',';

}
return substr($addtoQuery, 0, -1);

}

$parameters = array("range", "distance", "which");
$tables = array("north", "south");
$s = s($parameters);
$t = t($tables);
function createQuery($s, $t){

$query = "SELECT $s FROM $t";
return $query;
}

echo createQuery($s,$t);
?>

Результат echo => диапазон SELECT, расстояние, которое от севера, юг, что вы можете просто добавить в Mysqli - Query

Извините, если это не то, что вы искали.

Удачи!

ответил(а) 2021-01-19T17:25:36+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема