Re: Does PDO prevent class functions from calling other class functions?
| From: | Nathan Nobbe | Date: | Thu, 02 Aug 2007 16:19:23 +0000 |
| Subject: | Re: Does PDO prevent class functions from calling other class functions? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-260069@lists.php.net to get a copy of this message | ||
> On 8/2/07, Ken Tozier <kentozier@comcast.net> wrote:
> How would I go about that? I just took a quick look at the try/catch
> documentation and it looks like it's my responsibility to throw
>exceptions which isn't particularly useful if it's PHP itself that is
> doing something unexpected....
well, youre not throwing an exception here in your code, your doing
something called
swallowing the exception. which is typically not a good practice.
catch (PDOException $e)
{
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
and you could show us the output from
$e->getMessage()
thats where the script is blowing up. calling die() after that will
obviously stop processing
so you have no hope of recovering gracefully.
-nathan
On 8/2/07, Ken Tozier <kentozier@comcast.net> wrote:
>
>
> On Aug 2, 2007, at 12:03 PM, Nathan Nobbe wrote:
>
> > can you supply an error or warning that php is giving ?
> > it would help to determine the problem.
>
> How would I go about that? I just took a quick look at the try/catch
> documentation and it looks like it's my responsibility to throw
> exceptions which isn't particularly useful if it's PHP itself that is
> doing something unexpected....
>
> http://www.php.net/manual/en/language.exceptions.php
>
>
> >
> > -nathan
> >
> > On 8/2/07, Ken Tozier <kentozier@comcast.net> wrote: Hi
> >
> > I've been writing PHP classes for around two years now but all of a
> > sudden, the things I used to do don't work any more. I have a class
> > that implements utility functions for database calls using PDO and am
> > finding that I can't call one utility function from within another.
> > If each function is called by itself from a script, they work
> > perfectly. This is really basic stuff so I'm very puzzled why it
> > isn't working. The only difference between these new classes and my
> > old classes is the use of PDO. Could PDO be causing all these
> > headaches?
> >
> > Anyone see where I'm screwing up?
> >
> > Thanks in advance
> >
> > Ken
> >
> > Here's the '__construct' function of the included 'MySQLDatabase'
> > class
> >
> > function __construct($inDomain, $inUser, $inPassword, $inDBName)
> > {
> > try
> > {
> > $this->db = new PDO('mysql:host='.
> > $inDomain.';dbname='.$inDBName,
> > $inUser, $inPassword);
> >
> > // set error reporting
> > $this->db->setAttribute(PDO::ATTR_ERRMODE,
> > PDO::ERRMODE_EXCEPTION);
> > }
> > catch (PDOException $e)
> > {
> > print "Error!: " . $e->getMessage() .
> > "<br/>";
> > die();
> > }
> > }
> >
> > Here's the utility class so far
> >
> > <?php
> > // MySQLDatabase is a DB access class that handles a bunch
> > of stuff
> > like pulling values out of a query
> > // value coersion etc. I've tested this for the last day or
> > so and
> > it seems to be stable.
> > include_once('MySQLDatabase.php');
> >
> > class PMXUtilities
> > {
> > private $db;
> >
> > function __construct()
> > {
> > $domain = 'localhost';
> > $user = 'root';
> > $password = '';
> > $db_name = 'pagemanager';
> >
> > $this->db = new MySQLDatabase
> > ($domain, $user, $password, $db_name);
> > }
> >
> > // if this is called on its own, it works
> > function site_for_pub($inPubID)
> > {
> > $query = 'select
> > site.id, site.site_name from site, publication
> > where publication.id='.$inPubID.' and publication.site=site.id';
> > $coersions = array
> > ('id'=> 'integer');
> > $args = array
> > ('query'=> $query, 'coersions'=> $coersions);
> >
> > $queryResult = $this->db-
> > >query_database($args);
> >
> > if (count($queryResult) > 0)
> > return $queryResult[0]['id'];
> > else
> > return 'Error:
> > PMXUtilities.site_for_pub_id failed while fetching
> > site info for publication:'.$inPubID;
> > }
> >
> > / if this is called on its own, it works
> > function directory_type_id_for_name($inName)
> > {
> > $query = 'select
> > id from directory_type where name="'.$inName.'"';
> > $coersions = array
> > ('id'=> 'integer');
> > $args = array
> > ('query'=> $query, 'coersions'=> $coersions);
> >
> > $queryResult = $this->db-
> > >query_database($args);
> >
> > if (count($queryResult) > 0)
> > return $queryResult[0]['id'];
> > else
> > return 'Error:
> > PMXUtilities.site_for_pub_id failed while fetching
> > directory type id for directory:'.$inName;
> > }
> >
> > // this function never gets past the first "echo"
> > function directory_path_for_pub_id($inPubID,
> > $inDirType)
> > {
> > echo 'entered: directory_path_for_pub_id';
> >
> > // seems to die on next line as the 'echo
> > site' line never prints
> > $site = $this-
> > >site_for_pub_id($inPubID);
> > echo 'site: '.$site.'<br>';
> > /*
> > $dirTypeID = $this-
> > >directory_type_id_for_name($inDirType);
> > echo 'dir_type: '.$dirTypeID.'<br>';
> >
> > $query = "select
> > server.server_name, directory.path from
> > directory, server, site where directory.type=".$dirTypeID." and
> > directory.server=server.id and server.site=site.id and site.id=".
> > $site;
> > echo $query.'<br>';
> > $queryResult = $this->db->query_database
> > ($query);
> >
> > return $queryResult[0]->server_name.
> > $queryResult[0]->path;
> > */
> > }
> >
> > }
> > ?>
> >
> > --
> > PHP General Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>