[PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Ken Tozier

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



Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Nathan Nobbe
 On 8/2/07, Ken Tozier [EMAIL PROTECTED] wrote:
 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.

can you supply an error or warning that php is giving ?
it would help to determine the problem.

-nathan

On 8/2/07, Ken Tozier [EMAIL PROTECTED] 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';
   

Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Ken Tozier


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 [EMAIL PROTECTED] 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

Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Nathan Nobbe
 On 8/2/07, Ken Tozier [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 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 [EMAIL PROTECTED] 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
  

Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Ken Tozier


On Aug 2, 2007, at 12:19 PM, Nathan Nobbe wrote:


 On 8/2/07, Ken Tozier [EMAIL PROTECTED] 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.


There is no error. The browser calls the script and paints a blank  
screen. If I do a view source same deal, nothing.


Here's the MySQLDatabase query_database' function that passes the  
actual call to PDO


function query_database($inQuery)
{
$query  = $inQuery;
$coersions  = null;
$object_key = null;
$group_by_key   = null;

if (is_array($inQuery))
{
$query  = $inQuery['query'];
$coersions  = $inQuery['coersions'];
$object_key = $inQuery['object_key'];
$group_by_key   = $inQuery['group_by_key'];
}

try
{
// determine query type
if (strpos($query, 'insert') === false)
{
$rows   = array();
$rowCounter = 0;

foreach ($this-db-query($query, PDO::FETCH_NAMED) as 
$row)
{
$rowFields  = array();
$recordKey  = $rowCounter;

foreach ($row as $key = $value)
{
// remember this key if it matches the 
user specified object key
if (($object_key != null)  ($key == 
$object_key))
$recordKey  = 
$value;

// perform user specified coersions
if ($coersions != null)
$value  = 
$this-coerce_value($value, $coersions[$key]);

$rowFields[$key]
= $value;
}

// perform grouping if requested
if ($group_by_key == null)
$rows[$recordKey]   = 
$rowFields;
else
{
$groupKey   = 
$rowFields[$group_by_key];

if ($rows[$groupKey] == null)
$rows[$groupKey]= 
array();

$rows[$groupKey][]  = 
$rowFields;
}

$rowCounter++;
}

return $rows;
}
else
{
// return last insert ID
return ($this-db-lastInsertId() + 0);
}
}
catch (PDOException $error)
{
print Error!:  . $error-getMessage() . br/;
//die();
}
}

And here's a modified version of the directory_path_for_pub_id with  
a try/catch


function directory_path_for_pub_id($inPubID, $inDirType)
{

echo 'entered: directory_path_for_pub_id';

try
{
$site   = $this-site_for_pub_id($inPubID);
echo 'site: '.$site.'br';
}
// Tried both of these. Result: blank window/blank view source'
catch ($e)
catch (Exception $e)
{
print $e.'br';
}
}





-nathan
On 8/2/07, Ken Tozier [EMAIL PROTECTED] 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 

Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Ken Tozier


On Aug 2, 2007, at 12:15 PM, Andrew Ballard wrote:


Ken,

Your method name is site_for_pub, and you are trying to call  
site_for_pub_id.


I am indeed. What a bonehead.

Thanks Andrew that fixed it.

Ken

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



Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Andrew Ballard
Ken,

Your method name is site_for_pub, and you are trying to call site_for_pub_id.

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



Re: [PHP] Does PDO prevent class functions from calling other class functions?

2007-08-02 Thread Andrew Ballard
It's usually the obvious things that get you -- especially after
you've been staring at the same piece of code for any length of time.
:)

Andrew

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