RE: MS SQL 'Changed database context' error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Robert,

Believe it or not, it's a simple SELECT statement!  (I'm not even aware
that I'm changing context, nor exactly what that means.  I thought that
if I used the same $db resource, things would be fine.)  Other SELECTs work,
but
not this particular one!  Here's the script (the FindInDb function below
has, of course, been called from a prior script):

    /**
     * Find the record in the db that matches the Encounter info.
     *
     * If $updateObject is TRUE, then we update the object's fields with
     * values from the matching record in the database record.
     */
    function FindInDb(&$db, $updateObject, &$errStr)
    {
        global $DbOwner;	// null string ("") for MS Sql Server

        if (!IsSet($this->_deviceId) || !(IsSet($this->_timeStart))) {
            $errStr .=
              "Encounter::FindInDb: either _deviceId or _timeStart is
NULL.";
            return FALSE;
        }

        $sql = "SELECT * from {$DbOwner}Encounter " .
               "WHERE (Device_key = $this->_deviceId) AND " .
               "      (Time_start = " .
                 ToDate($this->_timeStart, "RRRR-MM-DD HH24:MI:SS") . ")";
        if (!UseOrOpenDb($db, $closeDb, $errStr))
            return FALSE;

        $result = GetInfoFromDbHelper($db, $sql, $errStr);

and so on.

The routine UseOrOpenDb looks at $db to see if it's a valid
$db connection.  If not, it opens a new one.  I've determined
that FindInDb is always passed a valid $db, so UseOrOpen doesn't
open a fresh one.

/**
 * Determine whether a db resource is already open; open one if not
 *
 * In many places we pass a $db resource to a routine.  That resource might
 * not be open, in which case the called routine should open the db.
 */
function UseOrOpenDb(&$db, &$dbOpened, &$errorString)
{
    if (!$db) {
        if (!($db = GetDbConnection ($errorString))) {
            return FALSE;
        }
        $dbOpened = TRUE;
    }
    else {
        $dbOpened = FALSE;
    }
    return TRUE;
}

GetInfoFromDbHelper simply executes the SQL string:

function GetInfoFromDbHelper ($db, &$select, &$errorString)
{
    // Get info, based on the $select query
    $result = $db->query($select);
    if (DB::isError($result)) {
        $errorString .= $result->getMessage() .
          $result->getDebugInfo ();
        return FALSE;
    }
    return $result;
}


-----Original Message-----
From: Robert Twitty [mailto:rtwitty@xxxxxxxxxxxxxxxxx]
Sent: Sunday, February 22, 2004 2:49 PM
To: Michael Flanagan
Cc: Php-Db
Subject: RE:  MS SQL 'Changed database context' error


Hi Michael

Can I see the script you are using that causes the problem?  When I change
the database context using the mssql extension under PERA it is not a
problem.

The PEAR DB drivers suppress all messages generated by their underlying
extensions.  The mssql DB driver will only stop if the mssql ext function
it calls fails.  Since changing the database context should not cause a
function to fail, I am not exactly sure why your script is stopping.

-- bob

 On Sat, 21 Feb 2004, Michael Flanagan wrote:

> Thanks, Frank.  Since I'm getting script stoppage as a result of this
error
> (message), does that suggest that PEAR is mishandling the error/message?
(I
> think PEAR loads and uses the standard mssql extension, but I'm not sure.
> Even if it does, I don't know if it inserts itself into the error handling
> stream.)  You say that if a message has a severity higher than the setting
> in php.ini (mine is set to 10), then it will stop the script.  Since the
> message I'm concerned with is a 0, then it should not stop the script.
But,
> my script is stopping as a result of that message.  So, is this a PEAR
> problem?  If not, what am I doing wrong?  If so, how can I get around
this?
> Thanks!
>
> Michael
>
> -----Original Message-----
> From: Frank M. Kromann [mailto:frank@xxxxxxxxxxxx]
> Sent: Saturday, February 21, 2004 7:40 PM
> To: Php-Db
> Subject: RE:  MS SQL 'Changed database context' error
>
>
> The MSSQL standard mssql extension handles the 'Changed database context'
> message correct.
>
> Each query send to the SQL server results in some form of message
> returned. This can be either an error message or an information message.
> The MSSQL extension uses two ini settings to tell PHP how to handle these
> messages. If a message from the server has a severity equal to or higher
> than the setting in php.ini, PHP will create a warning or an error (stop
> processing the script).
>
> The default setting for both parameters is 10, and that should give a
> smooth execution of most PHP scripts. For debugging you might want to
> lover these values. (And this is not what I said in an earlier post but I
> was wrong then. This time I checked it :-))
>
> 'Changed database context' has a severity = 0. This will only be handled
> by PHP if mssql.min_message_severity = 0.
>
> The mssql_get_last_message() function will always return the last message
> from the server. This function should not be used to check for errors. The
> function is intended to give the programmer a tool to fetch the message if
> an error is detected.
>
> - Frank
>
>
>
> > Hi Robert,
> >
> > I've seen your name on a few of the ODBTP posts.  You're one of the
> > developers of same, yes?  Are you familiar with the 'Changed database
> > context' message?  Do you know for sure that ODBTP handles that
> correctly?
> >
> > Thanks.
> >
> > Michael
> >
> > -----Original Message-----
> > From: Robert Twitty [mailto:rtwitty@xxxxxxxxxxxxxxxxx]
> > Sent: Thursday, February 19, 2004 5:38 PM
> > To: Michael Flanagan
> > Cc: php-db@xxxxxxxxxxxxx
> > Subject: RE:  MS SQL 'Changed database context' error
> >
> >
> > Hi Michael
> >
> > You might get better results using the odbtp extension with support for
> > the mssql functions. Since you are using Windows, use
> > php_odbtp_mssql.dll instead of php_mssql.dll.
> >
> > -- bob
> >
> > On Thu, 19 Feb 2004, Michael Flanagan wrote:
> >
> > > Adam,  Thanks for the suggestions.  I don't want to ignore all error
> > > handling.  Later, I might get an error that I really don't want php
> to
> > > swallow due to either of your suggestions.
> > >
> > > Has anyone else run into this and solved it?
> > >
> > > Any idea why the following lines in the php.ini file don't work?
> > > mssql.min_error_severity = 11
> > > mssql.min_message_severity = 11
> > >
> > > Michael
> > >
> > > -----Original Message-----
> > > From: Adam Voigt [mailto:adam@xxxxxxxxxxxxx]
> > > Sent: Thursday, February 19, 2004 12:44 PM
> > > To: Michael Flanagan
> > > Cc: php-db@xxxxxxxxxxxxx
> > > Subject: RE:  MS SQL 'Changed database context' error
> > >
> > >
> > > Try putting the error suppressor (@) before the query, eg:
> > >
> > > @mssql_query
> > >
> > > Or, try setting the error reporting:
> > >
> > > error_reporting(0);
> > >
> > >
> > >
> > > On Thu, 2004-02-19 at 14:38, Michael Flanagan wrote:
> > > > Thanks, Adam.
> > > >
> > > > I don't get the error in Enterprise manager.  MS has a KB article
> out
> > that
> > > > says that this message is informational.  I seem to remember that
> the
> > > > article also says the message comes out some times, and not other
> times,
> > > but
> > > > that you should just forget it.
> > > >
> > > > The particular SELECT statement I'm getting the message on is the
> second
> > > > query in my script.  The other query is to the same db; in fact, it
> uses
> > > the
> > > > exact same $db connection object.
> > > >
> > > > Any ideas on getting PHP to ignore this info message?
> > > >
> > > > Thanks again.
> > > > Michael
> > > >
> > > > -----Original Message-----
> > > > From: Adam Voigt [mailto:adam@xxxxxxxxxxxxx]
> > > > Sent: Thursday, February 19, 2004 12:13 PM
> > > > To: Michael Flanagan
> > > > Cc: php-db@xxxxxxxxxxxxx
> > > > Subject: Re:  MS SQL 'Changed database context' error
> > > >
> > > >
> > > > This may not be the case, but I've seen this before when the PHP
> library
> > > > didn't know how to express MS SQL's error, so it simply returns the
> last
> > > > message sent which was the informational context change. If it is
> infact
> > > > an error, you should be able to plug the query directly into
> Enterprise
> > > > Manager to see MS SQL's take on the problem, so to speak. =)
> > > >
> > > > But again, this is all just in my past experience's, yours may
> differ
> > > > greatly.
> > > >
> > > >
> > > >
> > > > On Thu, 2004-02-19 at 14:08, Michael Flanagan wrote:
> > > > > I'm getting the error "Changed database context" from MS SQL.  I
> see
> > > > > where this is supposedly just an informational message.  I've
> tried
> > > > > setting
> > > > >
> > > > > mssql.min_error_severity = 11
> > > > > mssql.min_message_severity = 11
> > > > >
> > > > > but to no avail.  What am I missing?  I don't mind the message so
> > much,
> > > > > but php treats this as an error, and doesn't execute my query.
> > > > >
> > > > > I'm running php 4.3.3 for Windows; the SQL Server and web server
> are
> > on
> > > > the
> > > > > same machine.  I'm using PEAR:DB for the database access.
> > > > >
> > > > > Thanks.
> > > > >
> > > > > Michael Flanagan
> > > > > voice: (1) 303-674-2691
> > > > >   fax: (1) 603-963-0704 (note '603' area code)
> > > > > mailto:mflanagan@xxxxxxxxxxxxxx
> > > > --
> > > >
> > > > Adam Voigt
> > > > adam@xxxxxxxxxxxxx
> > > >
> > > > --
> > > > PHP Database Mailing List (http://www.php.net/)
> > > > To unsubscribe, visit: http://www.php.net/unsub.php
> > > --
> > >
> > > Adam Voigt
> > > adam@xxxxxxxxxxxxx
> > >
> > > --
> > > PHP Database Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > > --
> > > PHP Database Mailing List (http://www.php.net/)
> > > To unsubscribe, visit: http://www.php.net/unsub.php
> > >
> > >
> >
> > --
> > PHP Database Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
>
> --
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
> --
> PHP Database Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux