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:[EMAIL PROTECTED]
> Sent: Sunday, February 22, 2004 2:49 PM
> To: Michael Flanagan
> Cc: Php-Db
> Subject: RE: [PHP-DB] 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:[EMAIL PROTECTED]
> > Sent: Saturday, February 21, 2004 7:40 PM
> > To: Php-Db
> > Subject: RE: [PHP-DB] 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:[EMAIL PROTECTED]
> > > Sent: Thursday, February 19, 2004 5:38 PM
> > > To: Michael Flanagan
> > > Cc: [EMAIL PROTECTED]
> > > Subject: RE: [PHP-DB] 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:[EMAIL PROTECTED]
> > > > Sent: Thursday, February 19, 2004 12:44 PM
> > > > To: Michael Flanagan
> > > > Cc: [EMAIL PROTECTED]
> > > > Subject: RE: [PHP-DB] 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:[EMAIL PROTECTED]
> > > > > Sent: Thursday, February 19, 2004 12:13 PM
> > > > > To: Michael Flanagan
> > > > > Cc: [EMAIL PROTECTED]
> > > > > Subject: Re: [PHP-DB] 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:[EMAIL PROTECTED]
> > > > > --
> > > > >
> > > > > Adam Voigt
> > > > > [EMAIL PROTECTED]
> > > > >
> > > > > --
> > > > > PHP Database Mailing List (http://www.php.net/)
> > > > > To unsubscribe, visit: http://www.php.net/unsub.php
> > > > --
> > > >
> > > > Adam Voigt
> > > > [EMAIL PROTECTED]
> > > >
> > > > --
> > > > 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