среда, 9 декабря 2020 г.

Описание функции: mysqli_stmt_bind_param

 

mysqli_stmt::bind_param

mysqli_stmt_bind_param

(PHP 5, PHP 7)

mysqli_stmt::bind_param -- mysqli_stmt_bind_param Привязка переменных к параметрам подготавливаемого запроса

Описание

Объектно-ориентированный стиль

public mysqli_stmt::bind_param ( string $types , mixed &$var , mixed &...$vars ) : bool


Процедурный стиль

mysqli_stmt_bind_param ( mysqli_stmt $stmt , string $types , mixed &$var , mixed &...$vars ) : bool

Привязывает переменные к меткам параметров в SQL-выражении, которое было подготовлено фукнцией mysqli_prepare().

Замечание:

Если размер данных переменной превышает максимально допустимый размер пакета (max_allowed_packet), необходимо задать значение b параметру types и использовать функцию mysqli_stmt_send_long_data(), которая будет передавать данные пакетами.

Замечание:

При использовании mysqli_stmt_bind_param() совместно с call_user_func_array() необходимо соблюдать особую осторожность. Нужно принимать во внимание, что mysqli_stmt_bind_param() принимает в качестве параметров только ссылки на значения, в то время как call_user_func_array() принимает список параметров, которые могут передаваться как по ссылке, так и по значению.

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

stmt

Только для процедурного стиля: Идентификатор выражения, полученный с помощью mysqli_stmt_init().

types

Строка, содержащая один или более символов, каждый из которых задает тип значения привязываемой переменной:

Символы задающие тип
Символ Описание
i соответствующая переменная имеет тип integer
d соответствующая переменная имеет тип double
s соответствующая переменная имеет тип string
b соответствующая переменная является большим двоичным объектом (blob) и будет пересылаться пакетами
var
vars

Количество переменных и длина строки types должны в точности соответствовать количеству параметров в запросе.

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

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

Примеры

Пример #1 Объектно-ориентированный стиль

<?php
$mysqli 
= new mysqli('localhost''my_user''my_password''world');

/* проверка подключения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$stmt $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd'$code$language$official$percent);

$code 'DEU';
$language 'Bavarian';
$official "F";
$percent 11.2;

/* выполнение подготовленного запроса */
$stmt->execute();

printf("%d строк вставлено.\n"$stmt->affected_rows);

/* закрываем запрос */
$stmt->close();

/* очищаем таблицу CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d строк удалено.\n"$mysqli->affected_rows);

/* закрываем подключение */
$mysqli->close();
?>

Пример #2 Процедурный стиль

<?php
$link 
mysqli_connect('localhost''my_user''my_password''world');

/* проверка подключения */
if (!$link) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}


$stmt mysqli_prepare($link"INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
mysqli_stmt_bind_param($stmt'sssd'$code$language$official$percent);

$code 'DEU';
$language 'Bavarian';
$official "F";
$percent 11.2;

/* выполнение подготовленного запроса */
mysqli_stmt_execute($stmt);

printf("%d строк вставлено.\n"mysqli_stmt_affected_rows($stmt));

/* закрываем запрос */
mysqli_stmt_close($stmt);

/* очищаем таблицу CountryLanguage */
mysqli_query($link"DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d строк удалено.\n"mysqli_affected_rows($link));

/* закрываем подключение */
mysqli_close($link);
?>

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

1 строк вставлено.
1 строк удалено.

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

  • mysqli_stmt_bind_result() - Привязка переменных к подготовленному запросу для размещения результата
  • mysqli_stmt_execute() - Выполняет подготовленный запрос
  • mysqli_stmt_fetch() - Связывает результаты подготовленного выражения с переменными
  • mysqli_prepare() - Подготавливает SQL выражение к выполнению
  • mysqli_stmt_send_long_data() - Отправка данных блоками
  • mysqli_stmt_errno() - Возвращает код ошибки выполнения последнего запроса
  • mysqli_stmt_error() - Возвращает строку с пояснением последней ошибки при выполнении запроса

Описание функции: mysqli_prepare.

 

mysqli::prepare

mysqli_prepare

(PHP 5, PHP 7)

mysqli::prepare -- mysqli_prepare Подготавливает SQL выражение к выполнению

Описание

Объектно-ориентированный стиль

public mysqli::prepare ( string $query ) : mysqli_stmt

Процедурный стиль

mysqli_prepare ( mysqli $link , string $query ) : mysqli_stmt

Подготавливает SQL-запрос и возвращает указатель на это выражение, который может использоваться для дальнейших операций с этим выражением. Запрос должен состоять из одного SQL выражения.

Метки параметров должны быть связаны с переменными приложения функциями mysqli_stmt_bind_param() и/или mysqli_stmt_bind_result() до запуска запроса или выборки строк.

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

link

Только для процедурного стиля: Идентификатор соединения, полученный с помощью mysqli_connect() или mysqli_init()

query

Текст запроса в виде строки.

Замечание:

Нет необходимости в завершающей точке с запятой или символе \g в конце выражения.

Этот параметр может содержать одну или несколько меток параметров SQL-запроса. Эти метки можно добавить путем встраивания знаков вопроса (?) в места выражения, где требуется подставлять параметры.

Замечание:

Эти метки можно встраивать только в определенные места в выражении. Например, они допустимы в списке VALUES() выражения INSERT (чтобы задать значения столбцов для строки), или в операциях сравнения предложения WHERE для задания сравниваемого значения.

Тем не менее, эти метки недопустимы в качестве идентификаторов (таких как имена столбцов или таблиц), а также в списке псевдонимов столбцов предложения SELECT. Нельзя также использовать параметры для задания обоих операндов бинарного оператора (например, знак равенства =). Последнее ограничение необходимо, так как в противном случае невозможно будет определить тип операндов. Еще недопустимо сравнивать метку параметра с NULL выражением ? IS NULL. В основном, параметры допустимы в выражениях языка манипулирования данными (DML), и недопустимы в выражениях языка определения данных (DDL).

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

mysqli_prepare() возвращает объект запроса или false в случае ошибки.

Примеры

Пример #1 Пример использования mysqli::prepare()

Объектно-ориентированный стиль

<?php
$mysqli 
= new mysqli("localhost""my_user""my_password""world");

/* проверка соединения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$city "Amersfoort";

/* создаем подготавливаемый запрос */
if ($stmt $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    
/* связываем параметры с метками */
    
$stmt->bind_param("s"$city);

    
/* запускаем запрос */
    
$stmt->execute();

    
/* связываем переменные с результатами запроса */
    
$stmt->bind_result($district);

    
/* получаем значения */
    
$stmt->fetch();

    
printf("%s находится в округе %s\n"$city$district);

    
/* закрываем запрос */
    
$stmt->close();
}

/* закрываем соединение */
$mysqli->close();
?>

Процедурный стиль

<?php
$link 
mysqli_connect("localhost""my_user""my_password""world");

/* проверка соединения */
if (mysqli_connect_errno()) {
    
printf("Не удалось подключиться: %s\n"mysqli_connect_error());
    exit();
}

$city "Amersfoort";

/* создаем подготавливаемый запрос */
if ($stmt mysqli_prepare($link"SELECT District FROM City WHERE Name=?")) {

    
/* связываем параметры с метками */
    
mysqli_stmt_bind_param($stmt"s"$city);

    
/* запускаем запрос */
    
mysqli_stmt_execute($stmt);

    
/* связываем переменные с результатами запроса */
    
mysqli_stmt_bind_result($stmt$district);

    
/* получаем значения */
    
mysqli_stmt_fetch($stmt);

    
printf("%s находится в округе %s\n"$city$district);

    
/* закрываем запрос */
    
mysqli_stmt_close($stmt);
}

/* закрываем соединение */
mysqli_close($link);
?>

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

Amersfoort is in district Utrecht

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

  • mysqli_stmt_execute() - Выполняет подготовленный запрос
  • mysqli_stmt_fetch() - Связывает результаты подготовленного выражения с переменными
  • mysqli_stmt_bind_param() - Привязка переменных к параметрам подготавливаемого запроса
  • mysqli_stmt_bind_result() - Привязка переменных к подготовленному запросу для размещения результата
  • mysqli_stmt_close() - Закрывает подготовленный запрос