summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-10-04 23:27:03 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-10-04 23:27:03 +0000
commite8c70bfa99f20ab02208aebcab01cf5e702fd067 (patch)
tree4d4f959e38dff96681c01ba1ac183df672fa5a75
parent9230cf3da61f904564df9d9dffaa4422950e2943 (diff)
downloadphp-git-e8c70bfa99f20ab02208aebcab01cf5e702fd067.tar.gz
Added support for character sets in pg_escape_string() for PostgreSQL
8.1.4 and higher.
-rw-r--r--NEWS2
-rw-r--r--ext/pgsql/config.m41
-rw-r--r--ext/pgsql/pgsql.c28
3 files changed, 25 insertions, 6 deletions
diff --git a/NEWS b/NEWS
index 6410fdc750..096e7957fa 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP NEWS
?? Sep 2006, PHP 5.2.0
- Speedup array/HashTable copying. (Matt W, Dmitry)
- Added ability to make SOAP call userspace PHP<->XML converters. (Dmitry)
+- Added support for character sets in pg_escape_string() for PostgreSQL
+ 8.1.4 and higher. (Ilia)
- Fixed infinite loop when a wrong color index is given to imagefill (Pierre)
- Fixed mess with CGI/CLI -d option (now it works with cgi; constants are
working exactly like in php.ini; with FastCGI -d affects all requests).
diff --git a/ext/pgsql/config.m4 b/ext/pgsql/config.m4
index 4ec031693b..38dd3813d4 100644
--- a/ext/pgsql/config.m4
+++ b/ext/pgsql/config.m4
@@ -91,6 +91,7 @@ if test "$PHP_PGSQL" != "no"; then
AC_CHECK_LIB(pq, PQgetCopyData,AC_DEFINE(HAVE_PQGETCOPYDATA,1,[PostgreSQL 7.4 or later]))
AC_CHECK_LIB(pq, PQsetErrorVerbosity,AC_DEFINE(HAVE_PQSETERRORVERBOSITY,1,[PostgreSQL 7.4 or later]))
AC_CHECK_LIB(pq, PQftable,AC_DEFINE(HAVE_PQFTABLE,1,[PostgreSQL 7.4 or later]))
+ AC_CHECK_LIB(pq, PQescapeStringConn, AC_DEFINE(HAVE_PQESCAPE_CONN,1,[PostgreSQL 8.1 or later]))
AC_CHECK_LIB(pq, pg_encoding_to_char,AC_DEFINE(HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT,1,[Whether libpq is compiled with --enable-multibyte]))
LIBS=$old_LIBS
LDFLAGS=$old_LDFLAGS
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 52e26cde4a..85db15c16d 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -3547,20 +3547,36 @@ PHP_FUNCTION(pg_copy_from)
/* }}} */
#ifdef HAVE_PQESCAPE
-/* {{{ proto string pg_escape_string(string data)
+/* {{{ proto string pg_escape_string([resource connection,] string data)
Escape string for text/char type */
PHP_FUNCTION(pg_escape_string)
{
char *from = NULL, *to = NULL;
+ zval *pgsql_link;
+ PGconn *pgsql;
int to_len;
int from_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
- return;
+ int id;
+
+ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pgsql_link, &from, &from_len) == SUCCESS) {
+ id = -1;
+ } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &from, &from_len) == SUCCESS) {
+ pgsql_link = NULL;
+ id = PGG(default_link);
+ } else {
+ WRONG_PARAM_COUNT;
}
- to = (char *)safe_emalloc(from_len, 2, 1);
- to_len = (int)PQescapeString(to, from, from_len);
+ to = (char *) safe_emalloc(from_len, 2, 1);
+
+#ifdef HAVE_PQESCAPE_CONN
+ if (pgsql_link != NULL || id != -1) {
+ ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
+ to_len = (int) PQescapeStringConn(pgsql, to, from, (size_t)from_len, NULL);
+ } else
+#endif
+ to_len = (int) PQescapeString(to, from, (size_t)from_len);
+
RETURN_STRINGL(to, to_len, 0);
}
/* }}} */