#php #windows #visual-c #build #php-extension
#php #Windows #visual-c #сборка #php-расширение
Вопрос:
Я пытаюсь скомпилировать расширение SAP SqlAnywhere php для использования с PHP 8.0.12; источник для этого расширения я скачал из этого места. На этом сайте собраны версии расширения для различных версий PHP вплоть до PHP 7.4. Поскольку в настоящее время мы используем PHP 8.0.12 на нашем сервере разработки, я хотел создать это расширение для этой версии или для PHP 8.0.13.
Мне удалось правильно настроить среду разработки в Windows 10, установив Visual Studio 2019
в том числе Visual C 2015-2022 Redistributable
и git
. Используя эту среду, я смог создать расширение для PHP 7.4 без проблем, но когда я пытаюсь выполнить сборку для PHP 8.0.12, я получаю сообщение о следующих ошибках:
$ nmake
Microsoft (R) Program Maintenance Utility Version 14.29.30137.0
Copyright (C) Microsoft Corporation. All rights reserved.
sacapidll.c
sqlany_dbg.c
sqlanywhere.c
extsqlanywheresqlanywhere.c(773): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(773): error C2061: syntax error: identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(773): error C2059: syntax error: ';'
extsqlanywheresqlanywhere.c(773): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(775): error C2449: found '{' at file scope (missing function header?)
extsqlanywheresqlanywhere.c(780): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(1002): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(1002): error C2061: syntax error: identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(1002): error C2059: syntax error: ';'
extsqlanywheresqlanywhere.c(1002): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1004): error C2449: found '{' at file scope (missing function header?)
extsqlanywheresqlanywhere.c(1007): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(1194): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1194): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1246): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1246): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1258): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1258): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1306): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1306): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1347): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1347): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1415): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1415): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1462): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1462): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1540): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1540): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1678): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1677): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(1678): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1699): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1699): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(1725): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(1725): error C2061: syntax error: identifier 'TSRMLS_DC'
extsqlanywheresqlanywhere.c(1725): error C2059: syntax error: ';'
extsqlanywheresqlanywhere.c(1725): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1727): error C2449: found '{' at file scope (missing function header?)
extsqlanywheresqlanywhere.c(1763): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(1855): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1854): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(1855): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1866): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(1866): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(1870): error C2059: syntax error: 'while'
extsqlanywheresqlanywhere.c(1870): error C2059: syntax error: 'return'
extsqlanywheresqlanywhere.c(1870): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(1871): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(1878): error C2099: initializer is not a constant
extsqlanywheresqlanywhere.c(1880): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1880): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1884): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1884): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1885): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1885): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1886): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1886): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1887): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1887): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1888): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1888): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1889): error C2143: syntax error: missing '{' before '->'
extsqlanywheresqlanywhere.c(1889): error C2059: syntax error: '->'
extsqlanywheresqlanywhere.c(1891): error C2059: syntax error: 'if'
extsqlanywheresqlanywhere.c(1903): warning C4047: 'function': 'sqlany_result_t *' differs in levels of indirection from 'int'
extsqlanywheresqlanywhere.c(1903): warning C4024: 'cache_result': different types for formal and actual parameter 1
extsqlanywheresqlanywhere.c(1903): error C2099: initializer is not a constant
extsqlanywheresqlanywhere.c(1904): error C2059: syntax error: 'if'
extsqlanywheresqlanywhere.c(1907): error C2059: syntax error: 'else'
extsqlanywheresqlanywhere.c(1910): error C2059: syntax error: 'if'
extsqlanywheresqlanywhere.c(1920): error C2059: syntax error: 'else'
extsqlanywheresqlanywhere.c(1932): error C2059: syntax error: 'if'
extsqlanywheresqlanywhere.c(1933): error C2059: syntax error: 'do'
extsqlanywheresqlanywhere.c(1933): error C2059: syntax error: 'while'
extsqlanywheresqlanywhere.c(1939): error C2059: syntax error: '}'
extsqlanywheresqlanywhere.c(2062): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2061): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2062): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2072): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2072): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(2077): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2077): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(2129): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2128): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2129): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2139): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2139): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(2192): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2191): error C2198: 'zend_fetch_resource_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2192): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2227): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2226): error C2198: 'zend_fetch_resource_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2227): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2237): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2237): error C2198: 'php_error_docref': too few arguments for call
extsqlanywheresqlanywhere.c(2266): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2265): error C2198: 'zend_fetch_resource_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2266): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2289): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2288): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2289): error C2059: syntax error: ')'
extsqlanywheresqlanywhere.c(2318): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
extsqlanywheresqlanywhere.c(2317): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
extsqlanywheresqlanywhere.c(2318): fatal error C1003: error count exceeds 100; stopping compilation
NMAKE : fatal error U1077: '"C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostX86x86cl.exe"' : return code '0x2'
Stop.
Очевидно, что в ядре PHP 8.0.12, которое присутствует в PHP 7.4, чего-то не хватает — я думаю, это как-то связано с TSRMLS_DC
тем, что оно не определено, поскольку об этой ошибке сообщается первой.
Может ли кто-нибудь пролить свет на эту ошибку / эти ошибки и сообщить мне, есть ли какой-нибудь способ устранить недостающие зависимости, чтобы это расширение создавалось правильно?
Комментарии:
1. Модуль для PHP 8 теперь готов к загрузке с их веб-сайта: wiki.scn.sap.com/wiki/display/SQLANY /…
Ответ №1:
Я нашел ответ на этот вопрос на этом сайте. То, на TSRMLS_DC
что жалуется компилятор, — это Thread-Safe Resource Manager
макросы, которые ранее требовались, но больше не нужны для PHP 8. Их можно просто удалить из кода.
После удаления этих макросов исходный код будет скомпилирован, но при запуске расширения PHP выдаст ряд предупреждений, таких как следующее:
Warning: Missing arginfo for sqlanywhere_connect() in Unknown on line 0
Warning: Missing arginfo for sqlanywhere_commit() in Unknown on line 0
Причина этих предупреждений в том, что PHP 8 более строго требует arginfo
определения для всех функций расширения.
Вы можете определить эти блоки для всех функций, как описано в ссылке выше, чтобы избавиться от этих предупреждений.
Ответ №2:
Пошаговое решение, но для Linux — да, вопрос касается Windows, но можно сэкономить некоторое время, выполнив требуемые фрагменты кода PHP8. Вложения, отмеченные скобками, находятся под упорядоченным списком:
- Загрузите исходный код (a)
- Создайте
Dockerfile
(b) - Поместите распакованный исходный каталог в тот же путь, что и файл docker, чтобы у вас были файл и каталог рядом друг с другом
- Добавьте (c) в
sasql_php/sqlanywhere.c
, после строки24
… - … и добавьте (d) прямо над (!) вторым (!) вхождением фразы
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_bind_param_ex, 0)
… - …и замените весь раздел
zend_function_entry sqlanywhere_functions[] = {
, начинающийся с и заканчивающийся};
на (e) … - … и замените раздел
if( object_init( return_value ) == FAILURE ) { RETURN_FALSE; }
(просто найдите фразуobject_init
) на простоobject_init( return_value );
- В терминале в пути с файлом docker запустите
docker build -t php-sqlanywhere12-compiler:8.0-cli-alpine .
- Извлеките скомпилированный модуль с помощью чего-то вроде
docker run --rm -v "/path/on/the/host:/module" php-sqlanywhere12-compiler:8.0-cli-alpine /bin/sh -c "cp /sasql_php/modules/sqlanywhere.so /module/php-8.0.0_sqlanywhere.so"
- У вас должен быть скомпилированный модуль в
/path/on/the/host
а) https://wiki.scn.sap.com/wiki/display/SQLANY/The SAP SQL Anywhere PHP Модуль — в самом низу
б)
FROM debian:11
RUN apt update amp;amp;
apt install -y build-essential autoconf automake bison
flex re2c gdb libtool make pkgconf
valgrind git libxml2-dev libsqlite3-dev
RUN git clone https://github.com/php/php-src.git amp;amp;
cd ./php-src amp;amp;
git checkout PHP-8.0.12
WORKDIR /php-src
RUN ./buildconf --force amp;amp;
./configure --prefix=/php amp;amp;
make amp;amp;
make install
ENV PATH="/php/bin:${PATH}"
COPY ./sasql_php /sasql_php
WORKDIR /sasql_php
RUN phpize amp;amp;
./configure amp;amp;
make amp;amp;
make install
c)
#ifndef TSRMLS_D
#define TSRMLS_D void
#define TSRMLS_DC
#define TSRMLS_C
#define TSRMLS_CC
#define TSRMLS_FETCH()
#endif
d)
ZEND_BEGIN_ARG_INFO(arginfo_sasql_connect, 0)
ZEND_ARG_INFO(0, con_str)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_pconnect, 0)
ZEND_ARG_INFO(0, con_str)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_pconnect_from_sqlca, 0)
ZEND_ARG_INFO(0, sqlca)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_close, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_query, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, sql_str)
ZEND_ARG_INFO(0, result_mode)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_real_query, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, sql_str)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_store_result, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_use_result, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_next_result, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_set_option, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, option)
ZEND_ARG_INFO(0, value)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_affected_rows, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_commit, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_rollback, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_sqlstate, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_data_seek, 0)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, row_num)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_fetch_array, 0)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, result_type)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_fetch_assoc, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_fetch_field, 0)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, field_offset)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_fetch_object, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_fetch_row, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_field_seek, 0)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, field_offset)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_free_result, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_num_rows, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_result_all, 0)
ZEND_ARG_INFO(0, result)
ZEND_ARG_INFO(0, html_table_format_string)
ZEND_ARG_INFO(0, html_table_header_format_string)
ZEND_ARG_INFO(0, html_table_row_format_string)
ZEND_ARG_INFO(0, html_table_cell_format_string)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_error, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_errorcode, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_insert_id, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_message, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, message)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_prepare, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, sql_str)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_field_count, 0)
ZEND_ARG_INFO(0, conn)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_num_fields, 0)
ZEND_ARG_INFO(0, result)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_param_count, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_execute, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_close, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_result_metadata, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_affected_rows, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_num_rows, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_insert_id, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_send_long_data, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_ARG_INFO(0, param_number)
ZEND_ARG_INFO(0, data)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_store_result, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_free_result, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_reset, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_fetch, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_field_count, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_data_seek, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_ARG_INFO(0, offset)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_next_result, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_errno, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_error, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_stmt_sqlstate, 0)
ZEND_ARG_INFO(0, stmt)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_real_escape_string, 0)
ZEND_ARG_INFO(0, conn)
ZEND_ARG_INFO(0, str)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_sasql_get_client_info, 0)
ZEND_END_ARG_INFO()
e)
zend_function_entry sqlanywhere_functions[] = {
/* connection functions */
PHP_FE(sasql_connect, arginfo_sasql_connect)
PHP_FE(sasql_pconnect, arginfo_sasql_pconnect)
PHP_FE(sasql_pconnect_from_sqlca, arginfo_sasql_pconnect_from_sqlca)
PHP_FE(sasql_close, arginfo_sasql_close)
PHP_FE(sasql_query, arginfo_sasql_query)
PHP_FE(sasql_real_query, arginfo_sasql_real_query)
PHP_FE(sasql_store_result, arginfo_sasql_store_result)
PHP_FE(sasql_use_result, arginfo_sasql_use_result)
PHP_FE(sasql_next_result, arginfo_sasql_next_result)
PHP_FE(sasql_set_option, arginfo_sasql_set_option)
PHP_FE(sasql_affected_rows, arginfo_sasql_affected_rows)
PHP_FE(sasql_commit, arginfo_sasql_commit)
PHP_FE(sasql_rollback, arginfo_sasql_rollback)
PHP_FE(sasql_sqlstate, arginfo_sasql_sqlstate)
/* result functions */
/* PHP_FE(sasql_field_tell, NULL) */
PHP_FE(sasql_data_seek, arginfo_sasql_data_seek)
PHP_FE(sasql_fetch_array, arginfo_sasql_fetch_array)
PHP_FE(sasql_fetch_assoc, arginfo_sasql_fetch_assoc)
/* PHP_FE(sasql_fetch_field_direct, NULL) */
PHP_FE(sasql_fetch_field, arginfo_sasql_fetch_field)
PHP_FE(sasql_fetch_object, arginfo_sasql_fetch_object)
PHP_FE(sasql_fetch_row, arginfo_sasql_fetch_row)
PHP_FE(sasql_field_seek, arginfo_sasql_field_seek)
PHP_FE(sasql_free_result, arginfo_sasql_free_result)
/* PHP_FE(sasql_fetch_lengths, NULL) */
PHP_FE(sasql_num_rows, arginfo_sasql_num_rows)
PHP_FE(sasql_result_all, arginfo_sasql_result_all)
/* connection functions */
PHP_FE(sasql_error, arginfo_sasql_error)
PHP_FE(sasql_errorcode, arginfo_sasql_errorcode)
PHP_FE(sasql_insert_id, arginfo_sasql_insert_id)
PHP_FE(sasql_message, arginfo_sasql_message)
PHP_FE(sasql_prepare, arginfo_sasql_prepare)
PHP_FE(sasql_field_count, arginfo_sasql_field_count)
PHP_FE(sasql_num_fields, arginfo_sasql_num_fields)
/* statement functions */
PHP_FE(sasql_stmt_param_count, arginfo_sasql_stmt_param_count)
PHP_FE(sasql_stmt_bind_param_ex, arginfo_sasql_stmt_bind_param_ex)
PHP_FE(sasql_stmt_bind_param, arginfo_sasql_stmt_bind_param)
PHP_FE(sasql_stmt_execute, arginfo_sasql_stmt_execute)
PHP_FE(sasql_stmt_close, arginfo_sasql_stmt_close)
PHP_FE(sasql_stmt_result_metadata, arginfo_sasql_stmt_result_metadata)
PHP_FE(sasql_stmt_affected_rows, arginfo_sasql_stmt_affected_rows)
PHP_FE(sasql_stmt_num_rows, arginfo_sasql_stmt_num_rows)
PHP_FE(sasql_stmt_insert_id, arginfo_sasql_stmt_insert_id)
PHP_FE(sasql_stmt_bind_result, arginfo_sasql_stmt_bind_result)
PHP_FE(sasql_stmt_send_long_data, arginfo_sasql_stmt_send_long_data)
PHP_FE(sasql_stmt_store_result, arginfo_sasql_stmt_store_result)
PHP_FE(sasql_stmt_free_result, arginfo_sasql_stmt_free_result)
PHP_FE(sasql_stmt_reset, arginfo_sasql_stmt_reset)
PHP_FE(sasql_stmt_fetch, arginfo_sasql_stmt_fetch)
PHP_FE(sasql_stmt_field_count, arginfo_sasql_stmt_field_count)
PHP_FE(sasql_stmt_data_seek, arginfo_sasql_stmt_data_seek)
PHP_FE(sasql_stmt_next_result, arginfo_sasql_stmt_next_result)
PHP_FE(sasql_stmt_errno, arginfo_sasql_stmt_errno)
PHP_FE(sasql_stmt_error, arginfo_sasql_stmt_error)
PHP_FE(sasql_stmt_sqlstate, arginfo_sasql_stmt_sqlstate)
/* misc functions */
PHP_FE(sasql_real_escape_string, arginfo_sasql_real_escape_string)
PHP_FE(sasql_get_client_info, arginfo_sasql_get_client_info)
/* Aliases */
PHP_FALIAS(sasql_disconnect, sasql_close, arginfo_sasql_close)
PHP_FALIAS(sasql_escape_string, sasql_real_escape_string, arginfo_sasql_real_escape_string)
PHP_FALIAS(sasql_multi_query, sasql_real_query, arginfo_sasql_real_query)
{NULL, NULL, NULL}
};