RE: MS SQL 'Changed database context' error

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

 



Hi Michael

Prior to executing a query with the PEAR mssql DB driver, the driver will
always call mssql_select_db().  The db that was specified in the DSN is
the one that is selected.  If the db is changed after connecing via a
query, i.e., "use AnotherDB", this will cause a problem if the context is
changed back to the original DB.  Are you changing the DB after
connecting?

-- bob


On Sun, 22 Feb 2004, Michael Flanagan wrote:

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

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