might give the wrong results</emphasis>. Also, it has no way
to report error conditions.
</para>
<para>
<xref linkend="libpq-PQescapeString"/> can be used safely in
client programs that work with only one <productname>PostgreSQL</productname>
connection at a time (in this case it can find out what it needs to
know <quote>behind the scenes</quote>). In other contexts it is a security
hazard and should be avoided in favor of
<xref linkend="libpq-PQescapeStringConn"/>.
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQescapeByteaConn">
<term><function>PQescapeByteaConn</function><indexterm><primary>PQescapeByteaConn</primary></indexterm></term>
<listitem>
<para>
Escapes binary data for use within an SQL command with the type
<type>bytea</type>. As with <xref linkend="libpq-PQescapeStringConn"/>,
this is only used when inserting data directly into an SQL command string.
<synopsis>
unsigned char *PQescapeByteaConn(PGconn *conn,
const unsigned char *from,
size_t from_length,
size_t *to_length);
</synopsis>
</para>
<para>
Certain byte values must be escaped when used as part of a
<type>bytea</type> literal in an <acronym>SQL</acronym> statement.
<xref linkend="libpq-PQescapeByteaConn"/> escapes bytes using
either hex encoding or backslash escaping. See <xref
linkend="datatype-binary"/> for more information.
</para>
<para>
The <parameter>from</parameter> parameter points to the first
byte of the string that is to be escaped, and the
<parameter>from_length</parameter> parameter gives the number of
bytes in this binary string. (A terminating zero byte is
neither necessary nor counted.) The <parameter>to_length</parameter>
parameter points to a variable that will hold the resultant
escaped string length. This result string length includes the terminating
zero byte of the result.
</para>
<para>
<xref linkend="libpq-PQescapeByteaConn"/> returns an escaped version of the
<parameter>from</parameter> parameter binary string in memory
allocated with <function>malloc()</function>. This memory should be freed using
<function>PQfreemem()</function> when the result is no longer needed. The
return string has all special characters replaced so that they can
be properly processed by the <productname>PostgreSQL</productname>
string literal parser, and the <type>bytea</type> input function. A
terminating zero byte is also added. The single quotes that must
surround <productname>PostgreSQL</productname> string literals are
not part of the result string.
</para>
<para>
On error, a null pointer is returned, and a suitable error message
is stored in the <parameter>conn</parameter> object. Currently, the only
possible error is insufficient memory for the result string.
</para>
</listitem>
</varlistentry>
<varlistentry id="libpq-PQescapeBytea">
<term><function>PQescapeBytea</function><indexterm><primary>PQescapeBytea</primary></indexterm></term>
<listitem>
<para>
<xref linkend="libpq-PQescapeBytea"/> is an older, deprecated version of
<xref linkend="libpq-PQescapeByteaConn"/>.
<synopsis>
unsigned char *PQescapeBytea(const unsigned char *from,
size_t from_length,
size_t *to_length);
</synopsis>
</para>
<para>
The only difference from <xref linkend="libpq-PQescapeByteaConn"/> is that
<xref linkend="libpq-PQescapeBytea"/> does not take a <structname>PGconn</structname>
parameter. Because of this, <xref linkend="libpq-PQescapeBytea"/> can
only be used safely