Re: Oracle8 and varchar

From: Date: Wed, 28 Jun 2000 10:50:39 +0000
Subject: Re: Oracle8 and varchar
References: 1 2 3  Groups: php.db 
Request: Send a blank email to php-db+get-683@lists.php.net to get a copy of this message
Well, the code seems Ok to me. I have the following suggestions: 1) Check out the NLS_LANG env-var as suggested in previous posts. 2) Try the same using OCIFetchInto() call. As an example, here is a snippet of mine: $sel = "select portfname,usrtext,notify from afeportf where usrid=$usrid and portfid=$portfid and subportfid=$subportfid"; $stmt = ociparse($cone, $sel); @ociexecute($stmt); OCIFetchInto($stmt,&$result,OCI_NUM+OCI_RETURN_NULLS); $ui_portfname = decodestr($result[0]); $ui_usrtext = decodestr($result[1]); $ui_notify = decodestr($result[2]); 3) I think that the call to ocidefinebyname() takes a last argument of int. If you try it in PL/SQL stored procs you are obliged to also specify the length of the returning variable. From Ora manual <URL:http://aspasia.mm.di.uoa.gr/inet/orasupport/html804/server/a58241/ch10.htm#5871>: <ora-manual> The following syntax is also supported for BIND_VARIABLE. The square brackets [] indicate an optional parameter for the BIND_VARIABLE function. DBMS_SQL.BIND_VARIABLE( c IN INTEGER, name IN VARCHAR2, value IN VARCHAR2 CHARACTER SET ANY_CS [,out_value_size IN INTEGER]); To bind CHAR, RAW, and ROWID data, you can use the following variations on the syntax: DBMS_SQL.BIND_VARIABLE_CHAR( c IN INTEGER, name IN VARCHAR2, value IN CHAR CHARACTER SET ANY_CS [,out_value_size IN INTEGER]); DBMS_SQL.BIND_VARIABLE_RAW( c IN INTEGER, name IN VARCHAR2, value IN RAW [,out_value_size IN INTEGER]); DBMS_SQL.BIND_VARIABLE_ROWID( c IN INTEGER, name IN VARCHAR2, value IN ROWID); </ora-manual> It seems strange to me that PHP does not require the same argument as it eventually calls OCI() functions. Hope that helps, -Stathis. Olivier Lepretre wrote: > > Hi Rouvas : > > This is the code. the column b.proc_desc is the varchar2(20) causing problem (and all varchar2 > fields are causing me the same problem). if the value is for example GUIDE, the function strlen > returns a size of 10 .... but the real size is 5 .... After investigation, it appears that the > string is composed of G\0U\0I\0D\0E\0 .... strange isn't it ? > > The server is ORA/NT 8.0.5, client is on RH6.1 ORA8.0.x > > here is the source > > <?php > putenv("ORACLE_HOME=/app/oracle/product/8.0.5"); > putenv("ORACLE_SID=AFR1"); > > print "<HTML>\n"; > $conn = OCILogon("admafr1", "mypasswd","afr1"); > > $query= " select log_ldexec, log_lyproc, log_ldproc, b.proc_desc > \"DESC\" "; > $query.= " from afr_syslog a, afr_sysprocess b"; > $query.= " where a.proc_id=b.proc_id order by log_ldexec"; > > $stmt = OCIParse($conn,$query); > > ocidefinebyname($stmt,"LOG_LDEXEC",&$vlog_ldexec); > ocidefinebyname($stmt,"LOG_LYPROC",&$vlog_lyproc); > ocidefinebyname($stmt,"LOG_LDPROC",&$vlog_ldproc); > ocidefinebyname($stmt,"DESC",&$vdesc); > > ociexecute($stmt, OCI_DEFAULT); > > print "<TABLE BORDER=\"0\" > Cellspacing=\"2\">"; > print "<TR bgcolor=\"DDDDDD\">"; > print "<TH> <FONT face=\"Arial\" > size=\"-1\"> &nbsp; Execution Date &nbsp; </FONT></TH>"; > print "<TH> <FONT face=\"Arial\" > size=\"-1\"> &nbsp; Process &nbsp; </FONT></TH>"; > print "<TH> <FONT face=\"Arial\" > size=\"-1\"> &nbsp; size &nbsp; </FONT></TH>"; > print "<TH> <FONT face=\"Arial\" > size=\"-1\"> &nbsp; Day processed &nbsp; </FONT></TH>"; > print "</TR>"; > print "<TR></TR>"; > > while (OCIFetch($stmt)) > { > print "<TR >"; > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\"> &nbsp; ".$vlog_ldexec." > </FONT></TD>\n"; > print "<TD> <FONT face=\"Arial\" > size=\"-1\">&nbsp;" .$vdesc."</FONT></TD>\n"; > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\">".strlen($vdesc)." > </FONT></TD>\n"; > print "<TD align=\"center\"> <FONT > face=\"Arial\" size=\"-1\"> ".$vlog_ldproc."</FONT> > </TD>\n"; > print "</TR>"; > } > OCIFreeStatement($stmt); > OCILogoff($conn); > print "</HTML>\n"; > ?> > > And the result is > > Execution Date Process size Day processed > > 23-JUN-00 Guide 10 174 > 23-JUN-00 Asr comp. 18 159 > 23-JUN-00 Asr comp. 18 160 > 23-JUN-00 Asr comp. 18 161 > 23-JUN-00 Asr comp. 18 162 > 23-JUN-00 CC Detecti 20 163 > 23-JUN-00 Asr comp. 18 164 > 23-JUN-00 Asr comp. 18 165 > 23-JUN-00 Asr comp. 18 166 > 23-JUN-00 Asr comp. 18 167 > 23-JUN-00 Asr comp. 18 168 > 23-JUN-00 Asr comp. 18 169 > 23-JUN-00 Asr comp. 18 170 > 23-JUN-00 Asr comp. 18 171 > 23-JUN-00 Asr comp. 18 172 > 23-JUN-00 Asr comp. 18 173 > 23-JUN-00 Asr comp. 18 174 > 24-JUN-00 Load 9F 14 175 > 24-JUN-00 Load 9F 14 175 > 24-JUN-00 Load 8A 14 173 > > If you have any idea ... > > thanks in advance. > > ----- Original Message ----- > From: "Rouvas Stathis" <rouvas@di.uoa.gr> > To: "Olivier Lepretre" <olivier.lepretre@afrilink.net> > Cc: <php-db@lists.php.net> > Sent: Wednesday, June 28, 2000 12:08 PM > Subject: Re: [PHP-DB] Oracle8 and varchar > > > What exaclty ar you doing? Some code would be useful. I haven't > > encoutered any problems so far. > > I've used NT/Ora8i, Solaris/Ora.8.0.xx and SuSE/Ora.8.0.xx so far with > > no problems. > > -Stathis. > > > > > > Olivier Lepretre wrote: > > > > > > When I fetch a column of type varchar2 with php3, php is returning only the halfsize > > > of the column, one caracter on two is a \0. The result is always truncated to the size of the > > > column, but including the \0s. > > > > > > Exemple : column toto is varchar2(10) containing ABCDEFGHIJ > > > > > > Php is returning : A\0B\0C\0D\0E\0 wich is print ABCDE ... It misses the five last > > > letters because Php had already count 10 chars .... > > > > > > Could anyone help me, I don't want to double the size of all my varchars fields > > > !!! > > > > > > Thanks a lot > > > > > > __________________ > > > Olivier Lepretre > > > Afrilink Belgium S.A. > > > IT Manager > > > > -- > > +-----------------------------+ > > |Rouvas Stathis | > > |University of Athens | > > |Department of Informatics | > > |http://www.di.uoa.gr/~rouvas | > > |rouvas@di.uoa.gr | > > +-----------------------------+ > > > > -- > > PHP Database Mailing List (http://www.php.net/) > > To unsubscribe, e-mail: php-db-unsubscribe@lists.php.net > > For additional commands, e-mail: php-db-help@lists.php.net > > To contact the list administrators, e-mail: php-list-admin@lists.php.net > > -- +-----------------------------+ |Rouvas Stathis | |University of Athens | |Department of Informatics | |http://www.di.uoa.gr/~rouvas | |rouvas@di.uoa.gr | +-----------------------------+

« previous php.db (#683) next »