Files
php-doc-ru/reference/mysqli/mysqli_stmt/bind-param.xml
2023-01-28 09:24:03 +03:00

257 lines
9.1 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 63b99082ef83eade08151f8cb528246fded81db9 Maintainer: tmn Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="mysqli-stmt.bind-param" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>mysqli_stmt::bind_param</refname>
<refname>mysqli_stmt_bind_param</refname>
<refpurpose>
Привязка переменных к параметрам подготавливаемого запроса
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<para>&style.oop;</para>
<methodsynopsis role="mysqli_stmt">
<modifier>public</modifier> <type>bool</type><methodname>mysqli_stmt::bind_param</methodname>
<methodparam><type>string</type><parameter>types</parameter></methodparam>
<methodparam><type>mixed</type><parameter role="reference">var</parameter></methodparam>
<methodparam rep="repeat"><type>mixed</type><parameter role="reference">vars</parameter></methodparam>
</methodsynopsis>
<para>&style.procedural;</para>
<methodsynopsis>
<type>bool</type><methodname>mysqli_stmt_bind_param</methodname>
<methodparam><type>mysqli_stmt</type><parameter>statement</parameter></methodparam>
<methodparam><type>string</type><parameter>types</parameter></methodparam>
<methodparam><type>mixed</type><parameter role="reference">var</parameter></methodparam>
<methodparam rep="repeat"><type>mixed</type><parameter role="reference">vars</parameter></methodparam>
</methodsynopsis>
<para>
Привязывает переменные к меткам параметров в SQL-выражении, которое было
подготовлено функцией <function>mysqli_prepare</function> или <function>mysqli_stmt_prepare</function>.
</para>
<note>
<para>
Если размер данных переменной превышает максимально допустимый размер пакета
(max_allowed_packet), необходимо задать значение <literal>b</literal>
параметру <parameter>types</parameter> и использовать функцию
<function>mysqli_stmt_send_long_data</function>, которая будет передавать
данные пакетами.
</para>
</note>
<note>
<para>
При использовании <function>mysqli_stmt_bind_param</function> совместно с
<function>call_user_func_array</function> необходимо соблюдать особую
осторожность. Нужно принимать во внимание, что
<function>mysqli_stmt_bind_param</function> принимает в качестве параметров
только ссылки на значения, в то время как
<function>call_user_func_array</function> принимает список параметров,
которые могут передаваться как по ссылке, так и по значению.
</para>
</note>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
&mysqli.stmt.description;
<varlistentry>
<term><parameter>types</parameter></term>
<listitem>
<para>
Строка, содержащая один или более символов, каждый из которых задаёт
тип значения привязываемой переменной:
<table xml:id="mysqli-stmt.bind-param.parameters">
<title>Символы задающие тип</title>
<tgroup cols="2">
<thead>
<row>
<entry>Символ</entry>
<entry>Описание</entry>
</row>
</thead>
<tbody>
<row>
<entry>i</entry>
<entry>у соответствующей переменной тип <type>int</type></entry>
</row>
<row>
<entry>d</entry>
<entry>у соответствующей переменной тип <type>float</type></entry>
</row>
<row>
<entry>s</entry>
<entry>у соответствующей переменной тип <type>string</type></entry>
</row>
<row>
<entry>b</entry>
<entry>
соответствующая переменная является большим двоичным объектом
(blob) и будет пересылаться пакетами
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>var</parameter></term>
<term><parameter>vars</parameter></term>
<listitem>
<para>
Количество переменных и длина строки <parameter>types</parameter>
должны в точности соответствовать количеству параметров в запросе.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
&mysqli.conditionalexception;
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<example>
<title>Пример использования <methodname>mysqli_stmt::bind_param</methodname></title>
<para>&style.oop;</para>
<programlisting role="php">
<![CDATA[
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$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);
/* Clean up table CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("строк удалено: %d.\n", $mysqli->affected_rows);
]]>
</programlisting>
<para>&style.procedural;</para>
<programlisting role="php">
<![CDATA[
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect('localhost', 'my_user', 'my_password', 'world');
$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));
/* Clean up table CountryLanguage */
mysqli_query($link, "DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("строк удалено: %d.\n", mysqli_affected_rows($link));
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
строк добавлено: 1.
1 row deleted.
]]>
</screen>
</example>
<example>
<title>Пример использования <literal>...</literal> для предоставления аргументов</title>
<para>
Оператор <literal>...</literal> может использоваться для предоставления списка
аргументов переменной длины, например в конструкции <literal>WHERE IN</literal>.
</para>
<programlisting role="php">
<![CDATA[
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
$stmt = $mysqli->prepare("SELECT Language FROM CountryLanguage WHERE CountryCode IN (?, ?)");
/* использование ... для предоставления аргументов */
$stmt->bind_param('ss', ...['DEU', 'POL']);
$stmt->execute();
$stmt->store_result();
printf("найдено строк: %d.\n", $stmt->num_rows());
]]>
</programlisting>
&examples.outputs;
<screen>
<![CDATA[
найдено строк: 10.
]]>
</screen>
</example>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>mysqli_stmt_bind_result</function></member>
<member><function>mysqli_stmt_execute</function></member>
<member><function>mysqli_stmt_fetch</function></member>
<member><function>mysqli_prepare</function></member>
<member><function>mysqli_stmt_send_long_data</function></member>
<member><function>mysqli_stmt_errno</function></member>
<member><function>mysqli_stmt_error</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->