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