CakeFest 2024: The Official CakePHP Conference

PDOStatement::bindColumn

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::bindColumn Связывает столбец с переменной PHP

Описание

public PDOStatement::bindColumn(
    string|int $column,
    mixed &$var,
    int $type = PDO::PARAM_STR,
    int $maxLength = 0,
    mixed $driverOptions = null
): bool

PDOStatement::bindColumn() привязывает переменную к заданному столбцу в результирующем наборе запроса. Каждый вызов PDOStatement::fetch() или PDOStatement::fetchAll() будет обновлять все переменные, задавать им значения столбцов, с которыми они связаны.

Замечание:

В связи с тем, что информация о столбцах результирующего набора запроса не всегда доступна объекту PDO, пока запрос не будет запущен, приложениям следует вызывать этот метод после вызова PDOStatement::execute().

Однако, при работе с драйвером PgSQL, когда привязывается столбец с LOB-данными, приложению необходимо вызывать этот метод до вызова PDOStatement::execute(). В противном случае идентификатор большого объекта OID будет иметь тип integer.

Список параметров

column

Номер столбца (начиная с 1) или его имя в результирующем наборе запроса. Используя имя столбца, имейте в виду, что имя должно быть в том же регистре, в каком оно возвращено драйвером.

var

Имя переменной PHP, к которой требуется привязать столбец.

type

Тип данных параметра, заданный одной из констант PDO::PARAM_*.

maxLength

Подсказка для предварительного выделения памяти под переменную.

driverOptions

Дополнительные параметры для драйвера.

Возвращаемые значения

Возвращает true в случае успешного выполнения или false, если возникла ошибка.

Ошибки

Выдаёт ошибку уровня E_WARNING, если атрибуту PDO::ATTR_ERRMODE установлено значение PDO::ERRMODE_WARNING.

Выбрасывает исключение PDOException, если атрибуту PDO::ATTR_ERRMODE установлено значение PDO::ERRMODE_EXCEPTION.

Примеры

Пример #1 Связывание результирующего набора с переменными PHP

Привязывание столбцов результирующего набора к PHP переменным является эффективным способом сразу сделать данные каждой строки набора доступными приложению. В следующем примере показано, как PDO позволяет привязывать переменные и получать данные столбцов, принимая различные настройки и умолчания.

<?php
$stmt
= $dbh->prepare('SELECT name, colour, calories FROM fruit');
$stmt->execute();

/* Bind by column number */
$stmt->bindColumn(1, $name);
$stmt->bindColumn(2, $colour);

/* Bind by column name */
$stmt->bindColumn('calories', $cals);

while (
$stmt->fetch(PDO::FETCH_BOUND)) {
print
$name . "\t" . $colour . "\t" . $cals . "\n";
}

Результат выполнения приведённого примера:

apple   red     150
banana  yellow  175
kiwi    green   75
orange  orange  150
mango   red     200
strawberry      red     25

Смотрите также

  • PDOStatement::execute() - Запускает подготовленный запрос на выполнение
  • PDOStatement::fetch() - Извлечение следующей строки из результирующего набора
  • PDOStatement::fetchAll() - Выбирает оставшиеся строки из набора результатов
  • PDOStatement::fetchColumn() - Возвращает данные одного столбца следующей строки результирующего набора

add a note

User Contributed Notes 1 note

up
-16
Moses Blumenstiel
3 years ago
I wanted to efficiently bind columns and then put everything into one array.

<?php

$columns
= array(
'DEVICE_CONFIG' => '',
'CONSUMABLE_INFO' => '',
'DEVICE_UNIQUE_ID' => '',
'STATUS' => '',
'STATUS_MESSAGE' => '',
'LAST_MESSAGE_TIME' => '',
'DEVICE_DESCRIPTION' => ''
);

$statement = $this->connection->prepare($sql);

$statement->execute();

$x = 1;
foreach(
$columns as $column => $index){
$
$column = $index;
eval(
'$statement->bindColumn(' . $x++ . ', $' . $column . ');');
}

$output= array();
while(
$statement->fetch(\PDO::FETCH_BOUND)){
$temp = array();
foreach(
$columns as $columnName => $val){
eval(
"\$data = \$$columnName;");
$temp[$columnName] = $data;
}
$output[] = $temp;
}
?>
To Top