summaryrefslogtreecommitdiff
path: root/ext/pgsql
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-10-06 21:45:10 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-10-06 21:45:10 +0000
commitfab29dcbcfb665bed9262583105590b7ce8d5436 (patch)
tree5b84eb4de027324ca47aac6c1a9aeef29f110bb1 /ext/pgsql
parent7f75be9fb9f528245ac8c6740d57fe4be60a6758 (diff)
downloadphp-git-fab29dcbcfb665bed9262583105590b7ce8d5436.tar.gz
Make pg_escape_bytea() use PQescapeByteaConn() whenever possible.
Diffstat (limited to 'ext/pgsql')
-rw-r--r--ext/pgsql/config.m43
-rw-r--r--ext/pgsql/pgsql.c28
2 files changed, 25 insertions, 6 deletions
diff --git a/ext/pgsql/config.m4 b/ext/pgsql/config.m4
index 38dd3813d4..1ba1490cdf 100644
--- a/ext/pgsql/config.m4
+++ b/ext/pgsql/config.m4
@@ -91,7 +91,8 @@ 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, PQescapeStringConn, AC_DEFINE(HAVE_PQESCAPE_CONN,1,[PostgreSQL 8.1.4 or later]))
+ AC_CHECK_LIB(pq, PQescapeByteaConn, AC_DEFINE(HAVE_PQESCAPE_BYTEA_CONN,1,[PostgreSQL 8.1.4 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 9f6f00c35c..7f069e2d06 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -3581,19 +3581,33 @@ PHP_FUNCTION(pg_escape_string)
}
/* }}} */
-/* {{{ proto string pg_escape_bytea(string data)
+/* {{{ proto string pg_escape_bytea([resource connection,] string data)
Escape binary for bytea type */
PHP_FUNCTION(pg_escape_bytea)
{
char *from = NULL, *to = NULL;
size_t to_len;
- int from_len;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &from, &from_len) == FAILURE) {
+ int from_len, id = -1;
+#ifdef HAVE_PQESCAPE_BYTEA_CONN
+ PGconn *pgsql;
+#endif
+ zval *pgsql_link;
+
+ if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &from, &from_len) == SUCCESS) {
+ pgsql_link = NULL;
+ id = PGG(default_link);
+ } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs", &pgsql_link, &from, &from_len) == FAILURE) {
return;
}
- to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
+#ifdef HAVE_PQESCAPE_BYTEA_CONN
+ if (pgsql_link != NULL || id != -1) {
+ ZEND_FETCH_RESOURCE2(pgsql, PGconn *, &pgsql_link, id, "PostgreSQL link", le_link, le_plink);
+ to = (char *)PQescapeByteaConn(pgsql, from, (size_t)from_len, &to_len);
+ } else
+#endif
+ to = (char *)PQescapeBytea((unsigned char*)from, from_len, &to_len);
+
RETVAL_STRINGL(to, to_len-1, 1); /* to_len includes addtional '\0' */
free(to);
}
@@ -5129,7 +5143,11 @@ PHP_PGSQL_API int php_pgsql_convert(PGconn *pg_link, const char *table_name, con
else {
unsigned char *tmp;
size_t to_len;
+#ifdef HAVE_PQESCAPE_BYTEA_CONN
+ tmp = PQescapeByteaConn(pg_link, Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
+#else
tmp = PQescapeBytea(Z_STRVAL_PP(val), Z_STRLEN_PP(val), &to_len);
+#endif
Z_TYPE_P(new_val) = IS_STRING;
Z_STRLEN_P(new_val) = to_len-1; /* PQescapeBytea's to_len includes additional '\0' */
Z_STRVAL_P(new_val) = emalloc(to_len);