ID: 9738
Updated by: kalowsky
Old-Status: Feedback
Status: Analyzed
Bug Type: ODBC related
Operating system: 
PHP Version: 4.0.4pl1
Assigned To: 

marking this as analyzed as this will hopefully go away too with the cursor fix, but 
won't disappear until than...

Previous Comments:

[2001-06-10 16:05:30] [EMAIL PROTECTED]

patch sent to you for verification.  awaiting response :)

if you didn't get them AGAIN in email... i think it's your 
mail server btw.. ;-)


[2001-03-14 05:17:27] [EMAIL PROTECTED]

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
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, 
 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 
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)

$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)) {
        echo "can not execute '$sql' ";
    echo "closing connection $conn_id";
    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.

        $result = odbc_prepare_clean ($conn, $sql);
        odbc_setoption ($result, 2, 6, 3);
        odbc_execute ($result);  


ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at

PHP Development Mailing List <>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to