From: [EMAIL PROTECTED] Operating system: HP-UX 10.20 / Linux PHP version: 4.0.4pl1 PHP Bug Type: Feature/Change Request Bug description: odbc_prepare does implicit SQLSetStmtOption (6,2) (sets to dynamic cursor) Since some drivers don't like to perform certain queries with the default setting of the dynamic cursor, it might be nice to use something like "odbc_setoption" to manually change the type of Statement that the SQL will be prepared on. Problem is, currently when changing a statement option this way (argument of "2" for SQLSetStmtOption), you have to already have prepared a SQL statement: $result = odbc_prepare ($conn, $sql); odbc_setoption ($result, 2, 6, 3); odbc_execute ($result); This implicitly sets the statement option to set a dynamic cursor first, as the following ODBC trace shows: SQLAllocStmt hDbc=DBD0002 phstmt=40073138 SQLAllocStmt: returning SQL_SUCCESS SQLGetInfo hDbc=DBD0002 fInfoType=8 rgbInfoValue=7B03CD68 cbInfoValueMax=4 pcbInfoValue=0 SQLGetInfo: returning SQL_SUCCESS SQLSetStmtOption hStmt=DBD0003 fOption=6 vParam=00000002 SQLSetStmtOption: returning SQL_SUCCESS_WITH_INFO SQLPrepare hStmt=DBD0003 szSqlStr=400746F8 cbSqlStr=-3 [SELECT target.description, target_data.layer1_key,target_data.layer2_key, target_data.layer3_key,target_data.layer4_key,target_data.layer5_key,target_data.layer6_key,target_data.company_code,target_data.location_code FROM dw_user_targets JOIN target ON target.target_code = dw_user_targets.target_code JOIN target_data ON target_data.target_code = dw_user_targets.target_code AND target_data.company_code=2 AND target_data.year=1998 AND target_data.period_no=7 WHERE dw_user_targets.dw_userid='mark'] SQLPrepare: returning SQL_ERROR Here's sample script that could reproduce the above. (Just substitute the above query and connect to a Progress 8.3B database with a similar schema to get even closer) <? putenv("ODBCINI=/usr/local/openlink/odbc.ini"); $dsn="DSN=OracleLocal"; // this is a valid DSN set up in the above odbc.ini file, tested in odbctest $user="scott"; //default user for the demo Oracle database $password="tiger"; //default password for demo Oracle database $sql="SELECT * FROM EMP"; // directly execute mode if ($conn_id=odbc_connect("$dsn","","")){ echo "connected to DSN: $dsn"; if($result=odbc_prepare($conn_id, $sql)) { odbc_execute($result) }else{ echo "can not execute '$sql' "; } echo "closing connection $conn_id"; odbc_close($conn_id); }else{ echo "cannot connect to DSN: $dsn "; } ?> So, I propose making a new prepare function such as "odbc_prepare_clean" which doesn't do the implicit SetStmtOption(2,6) for the dynamic cursor. There shouldn't be a problem without the implicit SetStmtOption as the driver will default to what it supports anyway. E.g: $result = odbc_prepare_clean ($conn, $sql); odbc_setoption ($result, 2, 6, 3); odbc_execute ($result); -- Edit Bug report at: http://bugs.php.net/?id=9738&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]