false в случае ошибки.
*/
public function GetRow (string $table, array $columns = [], ConditionBuilder $where = new ConditionBuilder(),
string $className = "\\StdClass"): object|false
{
// Задаю массив параметров
$params = [];
// Формируем SQL-запрос
$sql = $this->PrepareSQLForRowsQuery($table, $columns, $where, $params);
// Добавляю лимит
$sql .= " LIMIT 1";
// Получаю строку
$row = $this->Query($sql, $params);
// Если не получено
if ($row === false)
// - то вывожу false
return false;
// Получаю объект
$item = $this->RestoreItem($row, $className, DBOperation::Get);
// Если при получении возникла ошибка
if ($item === null)
// - то возвращаю false
return false;
// Возвращаю элемент
return $item;
}
/**
* Получает набор строк в массиве данных, удовлетворяющий выборке.
*
* @param string $table Имя таблицы.
* @param array $columns Колонки, которые нужно включить в запрос.
* @param ConditionBuilder $where Where-условия выборки.
* @param string $className Полное имя класса, реализуемого интерфейсом IDBItem.
*
* @return false|ObjectArray Массив найденных классов или false
в случае ошибки.
*/
public
function GetRows (string $table, array $columns = [], ConditionBuilder $where = new ConditionBuilder(),
string $className = "\\StdClass"): false|ObjectArray
{
// Задаю массив параметров
$params = [];
// Получаю SQL запрос
$sql = $this->PrepareSQLForRowsQuery($table, $columns, $where, $params);
// Получаю строки на основании запроса
$queryResult = $this->Query($sql, $params);
// Если строки не получены
if ($queryResult === false)
// - то выдаю ошибку
return false;
// Создаю массив объектов
$result = new ObjectArray();
// Для каждого элемента
foreach ($queryResult as $row) {
// - пытаюсь восстановить объект
$item = $this->RestoreItem($row, $className, DBOperation::Get);
// - если не получилось
if ($item === null)
// -- то пропускаю элемент
continue;
// - добавляю элемент в массив
$result[] = $item;
}
// Выдаю массив объектов
return $result;
}
/**
* Получает колонку в массиве данных.
*
* @param string $table Имя таблицы.
* @param string $column Имя колонки.
* @param ConditionBuilder $where Параметры запроса.
*
* @return false|array Ассоциированный массив с результатом запроса или false в случае ошибки.
*
* @see Query
*/
public
function GetCol (string $table, string $column, ConditionBuilder $where = new ConditionBuilder()): false|array
{
/**
* Интерпретирую условия.
*
* @var string $sql_where Строка запроса.
* @var array $params Массив параметров строки запроса.
*/
[$sql_where, $params] = $where->Build();
// Создаю запрос
$sql = "SELECT $this->DBSignOpen$column$this->DBSignClose FROM $this->DBSignOpen$table$this->DBSignClose";
// Если заданы where-параметры
if ($where->Count() > 0)
// - то добавляю их
$sql .= " WHERE $sql_where";
// Получаю столбец на основании запроса
$queryResult = $this->Query($sql, $params);
// Если строка не получена или пуста
if ($queryResult === false)
// - то выдаю ошибку
return false;
// Создаю результат
$result = [];
// Для каждого результата запроса
foreach ($queryResult as $row)
// - передаю его в результат
$result[] = $row[$column];
// Вывожу результат
return $result;
}
/**
* Получение значение единичного поля.
*
* @param string $table Имя таблицы.
* @param string $column Требуемый столбец.
* @param ConditionBuilder $where Параметры запроса.
*
* @return mixed|null Результат запроса или null
в случае ошибки.
*/
public
function GetValue (string $table, string $column, ConditionBuilder $where): mixed
{
// Получаю колонку по условию из таблицы
$result = $this->GetCol($table, $column, $where);
// Если результат получен, то выдаю первый элемент, а если нет, то null
return $result[0] ?? null;
}
}