I am not exactly sure if it is possible in ISQL but it is in Informix 4GL and Informix ESQL/C. I will give you an example of both, I doubt the the 4GL will work.
ESQL/C
The following code prepares a statement from a variable named demoquery. The text in the variable includes one ? placeholder. The prepared statement is associated with a cursor and, when the cursor is opened, the USING clause of the OPEN statement supplies a value for the place holder.
$char queryvalue [6];
$char demoquery [80];
$database stores5;
sprintf(demoquery, "%s %s",
"SELECT fname, lname FROM customer",
"WHERE lname > ? "

;
$PREPARE quid FROM $demoquery;
$DECLARE democursor CURSOR FOR quid;
strcpy(queryvalue, "C"

;
$OPEN democursor USING $queryvalue;
One where the parameter are known
sprintf(redo_st, "%s; %s",
"DROP TABLE workt1",
"CREATE TABLE workt1 (wtk serial, wtv float)" );
$PREPARE redotable FROM redo_st;
The fisrt 3 are examples of a 4GL statement where different values will be inserted each time the statement is executed. The last one is when parameters are known.
PREPARE s3 FROM
"SELECT * FROM customer WHERE state MATCHES ?"
PREPARE in1 FROM
"INSERT INTO manufact VALUES (?,?,?)"
PREPARE update2 FROM
"UPDATE customer SET zipcode = ?"
"WHERE CURRENT OF zip_cursor"
DEFINE u_po LIKE orders.po_num
PROMPT "Enter p.o. number please: " FOR u_po
PREPARE sel_po FROM
"SELECT * FROM order ",
"WHERE po_num = '", u_po, "'"
DECLARE get_po CURSOR FOR sel_po
Dodge20
If it ain't broke, don't fix it.