我正在尝试编译SAP扩展,以便与PHP8.0.12一起使用;这个扩展的源代码是我从SqlAnywhere下载的。这个站点已经为各种版本的PHP编译了扩展版本,直到PHP7.4。由于我们目前在开发服务器上使用PHP8.0.12,所以我想为这个版本或PHP8.0.13构建这个扩展。
在安装了Visual Studio 2019 (包括Visual C++ 2015-2022 Redistributable和git )之后,我设法在Windows 10上正确地设置了开发环境。使用此环境,我能够在没有问题的情况下构建PHP7.4的扩展,但是当我尝试为PHP8.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
ext\sqlanywhere\sqlanywhere.c(773): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(773): error C2061: syntax error: identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(773): error C2059: syntax error: ';'
ext\sqlanywhere\sqlanywhere.c(773): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(775): error C2449: found '{' at file scope (missing function header?)
ext\sqlanywhere\sqlanywhere.c(780): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(1002): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(1002): error C2061: syntax error: identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(1002): error C2059: syntax error: ';'
ext\sqlanywhere\sqlanywhere.c(1002): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1004): error C2449: found '{' at file scope (missing function header?)
ext\sqlanywhere\sqlanywhere.c(1007): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(1194): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1194): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1246): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1246): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1258): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1258): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1306): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1306): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1347): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1347): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1415): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1415): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1462): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1462): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1540): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1540): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1678): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1677): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1678): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1699): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1699): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1725): error C2146: syntax error: missing ')' before identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(1725): error C2061: syntax error: identifier 'TSRMLS_DC'
ext\sqlanywhere\sqlanywhere.c(1725): error C2059: syntax error: ';'
ext\sqlanywhere\sqlanywhere.c(1725): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1727): error C2449: found '{' at file scope (missing function header?)
ext\sqlanywhere\sqlanywhere.c(1763): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(1855): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1854): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(1855): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1866): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(1866): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(1870): error C2059: syntax error: 'while'
ext\sqlanywhere\sqlanywhere.c(1870): error C2059: syntax error: 'return'
ext\sqlanywhere\sqlanywhere.c(1870): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(1871): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(1878): error C2099: initializer is not a constant
ext\sqlanywhere\sqlanywhere.c(1880): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1880): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1884): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1884): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1885): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1885): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1886): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1886): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1887): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1887): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1888): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1888): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1889): error C2143: syntax error: missing '{' before '->'
ext\sqlanywhere\sqlanywhere.c(1889): error C2059: syntax error: '->'
ext\sqlanywhere\sqlanywhere.c(1891): error C2059: syntax error: 'if'
ext\sqlanywhere\sqlanywhere.c(1903): warning C4047: 'function': 'sqlany_result_t *' differs in levels of indirection from 'int'
ext\sqlanywhere\sqlanywhere.c(1903): warning C4024: 'cache_result': different types for formal and actual parameter 1
ext\sqlanywhere\sqlanywhere.c(1903): error C2099: initializer is not a constant
ext\sqlanywhere\sqlanywhere.c(1904): error C2059: syntax error: 'if'
ext\sqlanywhere\sqlanywhere.c(1907): error C2059: syntax error: 'else'
ext\sqlanywhere\sqlanywhere.c(1910): error C2059: syntax error: 'if'
ext\sqlanywhere\sqlanywhere.c(1920): error C2059: syntax error: 'else'
ext\sqlanywhere\sqlanywhere.c(1932): error C2059: syntax error: 'if'
ext\sqlanywhere\sqlanywhere.c(1933): error C2059: syntax error: 'do'
ext\sqlanywhere\sqlanywhere.c(1933): error C2059: syntax error: 'while'
ext\sqlanywhere\sqlanywhere.c(1939): error C2059: syntax error: '}'
ext\sqlanywhere\sqlanywhere.c(2062): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2061): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2062): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2072): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2072): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2077): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2077): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2129): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2128): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2129): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2139): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2139): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2192): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2191): error C2198: 'zend_fetch_resource_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2192): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2227): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2226): error C2198: 'zend_fetch_resource_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2227): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2237): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2237): error C2198: 'php_error_docref': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2266): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2265): error C2198: 'zend_fetch_resource_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2266): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2289): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2288): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2289): error C2059: syntax error: ')'
ext\sqlanywhere\sqlanywhere.c(2318): error C2146: syntax error: missing ')' before identifier 'TSRMLS_CC'
ext\sqlanywhere\sqlanywhere.c(2317): error C2198: 'zend_fetch_resource2_ex': too few arguments for call
ext\sqlanywhere\sqlanywhere.c(2318): fatal error C1003: error count exceeds 100; stopping compilation
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\cl.exe"' : return code '0x2'
Stop.显然,PHP8.0.12内核中缺少了一些东西,它存在于PHP7.4中--我认为这与未定义TSRMLS_DC有关,因为这是首先报告的错误。
有人能说明一下这个错误/这些错误吗?让我知道是否有办法解决缺少的依赖关系,这样这个扩展就可以正确构建了吗?
发布于 2021-12-13 18:39:45
我在本站上找到了答案。编译器抱怨的TSRMLS_DC是以前需要的Thread-Safe Resource Manager宏,但不再需要PHP8。这些宏可以从代码中删除。
删除这些宏后,源代码将编译,但当扩展运行时,PHP将发出许多警告,如以下警告:
Warning: Missing arginfo for sqlanywhere_connect() in Unknown on line 0
Warning: Missing arginfo for sqlanywhere_commit() in Unknown on line 0这些警告的原因是PHP8更严格地要求对所有扩展函数进行arginfo定义。
您可以为所有函数定义这些块,如上面的链接所述,以消除这些警告。
发布于 2022-03-11 22:01:08
一步一步的解决方案,但对Linux来说,问题是关于Windows的,但通过处理PHP8代码片段所需的内容,可以节省一些时间。带有括号的附件在有序列表下面:
Dockerfile (b)sasql_php/sqlanywhere.c后添加(c),行24.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 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中的编译模块( a) https://wiki.scn.sap.com/wiki/display/SQLANY/The+SAP+SQL+Anywhere+PHP+Module -在最底层
b)
FROM debian:11
RUN apt update && \
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 && \
cd ./php-src && \
git checkout PHP-8.0.12
WORKDIR /php-src
RUN ./buildconf --force && \
./configure --prefix=/php && \
make && \
make install
ENV PATH="/php/bin:${PATH}"
COPY ./sasql_php /sasql_php
WORKDIR /sasql_php
RUN phpize && \
./configure && \
make && \
make installc)
#ifndef TSRMLS_D
#define TSRMLS_D void
#define TSRMLS_DC
#define TSRMLS_C
#define TSRMLS_CC
#define TSRMLS_FETCH()
#endifd)
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}
};https://stackoverflow.com/questions/70225366
复制相似问题