1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-26 16:52:12 +01:00
Files
archived-doc-ru/reference/pdo_sqlite/PDO/sqliteCreateFunction.xml
Sergey Panteleev daef8df962 Обнуление тега Reviewed (#364)
[skip-lint]
[skip-spellcheck]
2021-11-16 13:03:53 +03:00

238 lines
8.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: 9e0f03ac354d797d1d16c0fcc1663e5e170f2727 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="pdo.sqlitecreatefunction" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>PDO::sqliteCreateFunction</refname>
<refpurpose>
Регистрация пользовательской функции для использования в SQL-запросах
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<modifier>public</modifier> <type>bool</type><methodname>PDO::sqliteCreateFunction</methodname>
<methodparam><type>string</type><parameter>function_name</parameter></methodparam>
<methodparam><type>callable</type><parameter>callback</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>num_args</parameter><initializer>-1</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
</methodsynopsis>
&warn.experimental.func;
<para>
Этот метод позволяет вам регистрировать функцию PHP как пользовательскую
функцию SQLite (User Defined Function, <acronym>UDF</acronym>), что позволит
использовать её в SQL-запросах.
</para>
<para>
UDF можно использовать в любом SQL-запросе, в котором позволяется использовать
функции, например SELECT, UPDATE, а также в триггерах.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>function_name</parameter></term>
<listitem>
<para>
Имя функции для использовании в запросах.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>callback</parameter></term>
<listitem>
<para>
Функция обратного вызова для обработки вызовов SQL-функции.
</para>
<note>
<simpara>
Функция обратного вызова должна возвращать значение понятного SQLite типа
(то есть <link linkend="language.types.intro">скалярного типа</link>).
</simpara>
</note>
<para>
Эта функция должна быть определена следующим образом:
<methodsynopsis>
<type>mixed</type><methodname><replaceable>callback</replaceable></methodname>
<methodparam><type>mixed</type><parameter>value</parameter></methodparam>
<methodparam rep="repeat"><type>mixed</type><parameter>values</parameter></methodparam>
</methodsynopsis>
<variablelist>
<varlistentry>
<term><parameter>value</parameter></term>
<listitem>
<para>
Первый аргумент передаваемый в SQL-функцию.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>values</parameter></term>
<listitem>
<para>
Последующие аргументы.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>num_args</parameter></term>
<listitem>
<para>
Количество аргументов, которое принимает функция. Если задать
равным <literal>-1</literal>, то функция будет принимать любое количество аргументов.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
Побитовая конъюнкция (ИЛИ) флагов. На данный момент поддерживается
только флаг <constant>PDO::SQLITE_DETERMINISTIC</constant>, который
определяет то, что функция всегда возвращает одинаковый результат для
одинаковых входных значений.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>7.1.4</entry>
<entry>
Добавлен параметр <parameter>flags</parameter>.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования <function>PDO::sqliteCreateFunction</function></title>
<programlisting role="php">
<![CDATA[
<?php
function md5_and_reverse($string)
{
return strrev(md5($string));
}
$db = new PDO('sqlite:sqlitedb');
$db->sqliteCreateFunction('md5rev', 'md5_and_reverse', 1);
$rows = $db->query('SELECT md5rev(filename) FROM files')->fetchAll();
?>
]]>
</programlisting>
</example>
</para>
<para>
В этом примере мы определили функцию, вычисляющую md5 сумму строки и
переворачивающую её. Когда SQL-запрос будет запущен, полученные
значения filename будут преобразованы этой функцией. Результирующий набор
<literal>$rows</literal> будет содержать преобразованные значения.
</para>
<para>
Красота подобного подхода заключается в том, что вам не нужно после получения
результирующего набора пробегаться по нему циклом &foreach; для вычисления
нужных значений.
</para>
<!-- not for PDO it doesn't, at least not yet
<para>
PHP registers a special function named <literal>php</literal> when the
database is first opened. The php function can be used to call any PHP
function without having to register it first.
</para>
<para>
<example>
<title>Example of using the PHP function</title>
<programlisting role="php">
<![CDATA[
<?php
$rows = $db->query("SELECT php('md5', filename) from files")->fetchAll();
?>
]]>
</programlisting>
<para>
This example will call the <function>md5</function> on each
<literal>filename</literal> column in the database and return the result
into <parameter>$rows</parameter>
</para>
</example>
</para>
-->
<tip>
<para>
Вы можете использовать <xref linkend="pdo.sqlitecreatefunction" /> и
<xref linkend="pdo.sqlitecreateaggregate" /> для переопределения
стандартных агрегирующих функций SQLite.
</para>
</tip>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><xref linkend="pdo.sqlitecreateaggregate" /></member>
<member><function>sqlite_create_function</function></member>
<member><function>sqlite_create_aggregate</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
-->