Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #1842 > unrolled thread

database access

Started byJivanmukta <jivanmukta@poczta.onet.pl>
First post2011-05-25 10:17 -0700
Last post2011-05-30 10:56 +0200
Articles 17 — 7 participants

Back to article view | Back to comp.lang.php


Contents

  database access Jivanmukta <jivanmukta@poczta.onet.pl> - 2011-05-25 10:17 -0700
    Re: database access Jerry Stuckle <jstucklex@attglobal.net> - 2011-05-25 17:37 -0400
      Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 08:09 -0400
        Re: database access Jerry Stuckle <jstucklex@attglobal.net> - 2011-05-26 09:00 -0400
          Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 10:22 -0400
            Re: database access Jerry Stuckle <jstucklex@attglobal.net> - 2011-05-26 11:41 -0400
              Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 12:07 -0400
                Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 12:14 -0400
      Re: database access sophal chao <w3cyberlearning@gmail.com> - 2011-05-29 13:41 -0700
        Re: database access Jerry Stuckle <jstucklex@attglobal.net> - 2011-05-29 23:12 -0400
    Re: database access JohnT <john@example.com> - 2011-05-26 13:05 +0000
      Re: database access Jivanmukta <jivanmukta@poczta.onet.pl> - 2011-05-26 06:37 -0700
        Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 10:30 -0400
          Re: database access sheldonlg <sheldonlg@thevillages.net> - 2011-05-26 10:33 -0400
        Re: database access Jerry Stuckle <jstucklex@attglobal.net> - 2011-05-26 11:43 -0400
      Re: database access Michael Fesser <netizen@gmx.de> - 2011-05-26 19:48 +0200
        Re: database access Erwin Moller <Since_humans_read_this_I_am_spammed_too_much@spamyourself.com> - 2011-05-30 10:56 +0200

#1842 — database access

FromJivanmukta <jivanmukta@poczta.onet.pl>
Date2011-05-25 10:17 -0700
Subjectdatabase access
Message-ID<7ded58f7-d089-4a1e-ba94-38183b0ec851@z37g2000vbl.googlegroups.com>
I new relatively new to PHP. I need your opinion if the following set
of database functions make sense:

function openDatabase() {
    global $db;
	try {
		$db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
		$db->exec('SET NAMES latin2');
		$db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		register_shutdown_function('closeDatabase');
	} catch (PDOException $e) {
		return false;
	}
    return true;
}

function closeDatabase() {
	global $db, $inTransaction;
	if ($inTransaction) {
		$db->rollBack();
		$inTransaction = false;
	}
    	if (!is_null($db)) {
		$db = null;
	}
}

function queryDatabase($sql) {
	global $db, $inTransaction;
	$result = array();
	try {
		$qry = $db->query($sql);
		if (!empty($qry)) {
			$result = $qry->fetchAll();
		}
	} catch (PDOException $e) {
		if ($inTransaction) {
			$db->rollBack();
		}
		error(ERRMSG_DATABASE_OPERATION_FAILED);
	}
	return $result;
}

function execDatabase($sql) {
	global $db, $inTransaction;
	$result = array();
	try {
		$result = $db->exec($sql);
	} catch (PDOException $e) {
		if ($inTransaction) {
			$db->rollBack();
		}
		error(ERRMSG_DATABASE_OPERATION_FAILED);
	}
	return $result;
}

function startTransaction() {
    	global $db, $inTransaction;
    	$db->beginTransaction();
	$inTransaction = true;
}

function commitTransaction() {
    	global $db, $inTransaction;
	$inTransaction = false;
    	if ($db->commit()) {
        	return;
    	}
    	$db->rollBack();
    	error(ERRMSG_DATABASE_OPERATION_FAILED);
}

function rollbackTransaction() {
    	global $db, $inTransaction;
	$inTransaction = false;
    	if ($db->rollBack()) {
        	return;
    	}
    	error(ERRMSG_DATABASE_OPERATION_FAILED);
}

function lockTables($tables) {
	return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
WRITE');
}

function unlockTables() {
	return execDatabase('UNLOCK TABLES');
}

[toc] | [next] | [standalone]


#1843

FromJerry Stuckle <jstucklex@attglobal.net>
Date2011-05-25 17:37 -0400
Message-ID<irjspv$iap$1@dont-email.me>
In reply to#1842
On 5/25/2011 1:17 PM, Jivanmukta wrote:
> I new relatively new to PHP. I need your opinion if the following set
> of database functions make sense:
>
> function openDatabase() {
>      global $db;
> 	try {
> 		$db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
> 		$db->exec('SET NAMES latin2');
> 		$db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
> 		$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
> 		register_shutdown_function('closeDatabase');
> 	} catch (PDOException $e) {
> 		return false;
> 	}
>      return true;
> }
>
> function closeDatabase() {
> 	global $db, $inTransaction;
> 	if ($inTransaction) {
> 		$db->rollBack();
> 		$inTransaction = false;
> 	}
>      	if (!is_null($db)) {
> 		$db = null;
> 	}
> }
>
> function queryDatabase($sql) {
> 	global $db, $inTransaction;
> 	$result = array();
> 	try {
> 		$qry = $db->query($sql);
> 		if (!empty($qry)) {
> 			$result = $qry->fetchAll();
> 		}
> 	} catch (PDOException $e) {
> 		if ($inTransaction) {
> 			$db->rollBack();
> 		}
> 		error(ERRMSG_DATABASE_OPERATION_FAILED);
> 	}
> 	return $result;
> }
>
> function execDatabase($sql) {
> 	global $db, $inTransaction;
> 	$result = array();
> 	try {
> 		$result = $db->exec($sql);
> 	} catch (PDOException $e) {
> 		if ($inTransaction) {
> 			$db->rollBack();
> 		}
> 		error(ERRMSG_DATABASE_OPERATION_FAILED);
> 	}
> 	return $result;
> }
>
> function startTransaction() {
>      	global $db, $inTransaction;
>      	$db->beginTransaction();
> 	$inTransaction = true;
> }
>
> function commitTransaction() {
>      	global $db, $inTransaction;
> 	$inTransaction = false;
>      	if ($db->commit()) {
>          	return;
>      	}
>      	$db->rollBack();
>      	error(ERRMSG_DATABASE_OPERATION_FAILED);
> }
>
> function rollbackTransaction() {
>      	global $db, $inTransaction;
> 	$inTransaction = false;
>      	if ($db->rollBack()) {
>          	return;
>      	}
>      	error(ERRMSG_DATABASE_OPERATION_FAILED);
> }
>
> function lockTables($tables) {
> 	return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
> WRITE');
> }
>
> function unlockTables() {
> 	return execDatabase('UNLOCK TABLES');
> }

Kind of, and maybe a bit overkill.  But personally I'd put it all in a 
Database class.  The code would be more flexible and less prone to errors.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#1847

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 08:09 -0400
Message-ID<irlfu3$3nk$1@dont-email.me>
In reply to#1843
On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>> I new relatively new to PHP. I need your opinion if the following set
>> of database functions make sense:
>>
>> function openDatabase() {
>> global $db;
>> try {
>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>> $db->exec('SET NAMES latin2');
>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>> register_shutdown_function('closeDatabase');
>> } catch (PDOException $e) {
>> return false;
>> }
>> return true;
>> }
>>
>> function closeDatabase() {
>> global $db, $inTransaction;
>> if ($inTransaction) {
>> $db->rollBack();
>> $inTransaction = false;
>> }
>> if (!is_null($db)) {
>> $db = null;
>> }
>> }
>>
>> function queryDatabase($sql) {
>> global $db, $inTransaction;
>> $result = array();
>> try {
>> $qry = $db->query($sql);
>> if (!empty($qry)) {
>> $result = $qry->fetchAll();
>> }
>> } catch (PDOException $e) {
>> if ($inTransaction) {
>> $db->rollBack();
>> }
>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>> }
>> return $result;
>> }
>>
>> function execDatabase($sql) {
>> global $db, $inTransaction;
>> $result = array();
>> try {
>> $result = $db->exec($sql);
>> } catch (PDOException $e) {
>> if ($inTransaction) {
>> $db->rollBack();
>> }
>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>> }
>> return $result;
>> }
>>
>> function startTransaction() {
>> global $db, $inTransaction;
>> $db->beginTransaction();
>> $inTransaction = true;
>> }
>>
>> function commitTransaction() {
>> global $db, $inTransaction;
>> $inTransaction = false;
>> if ($db->commit()) {
>> return;
>> }
>> $db->rollBack();
>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>> }
>>
>> function rollbackTransaction() {
>> global $db, $inTransaction;
>> $inTransaction = false;
>> if ($db->rollBack()) {
>> return;
>> }
>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>> }
>>
>> function lockTables($tables) {
>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>> WRITE');
>> }
>>
>> function unlockTables() {
>> return execDatabase('UNLOCK TABLES');
>> }
>
> Kind of, and maybe a bit overkill. But personally I'd put it all in a
> Database class. The code would be more flexible and less prone to errors.
>

Further, I would not have globals.  I would pass $db in via the 
constructor. Likewise, I would have $inTransaction be a class variable 
which gets set by the method startTransaction().

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1849

FromJerry Stuckle <jstucklex@attglobal.net>
Date2011-05-26 09:00 -0400
Message-ID<irlitn$lan$1@dont-email.me>
In reply to#1847
On 5/26/2011 8:09 AM, sheldonlg wrote:
> On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
>> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>>> I new relatively new to PHP. I need your opinion if the following set
>>> of database functions make sense:
>>>
>>> function openDatabase() {
>>> global $db;
>>> try {
>>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>>> $db->exec('SET NAMES latin2');
>>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>> register_shutdown_function('closeDatabase');
>>> } catch (PDOException $e) {
>>> return false;
>>> }
>>> return true;
>>> }
>>>
>>> function closeDatabase() {
>>> global $db, $inTransaction;
>>> if ($inTransaction) {
>>> $db->rollBack();
>>> $inTransaction = false;
>>> }
>>> if (!is_null($db)) {
>>> $db = null;
>>> }
>>> }
>>>
>>> function queryDatabase($sql) {
>>> global $db, $inTransaction;
>>> $result = array();
>>> try {
>>> $qry = $db->query($sql);
>>> if (!empty($qry)) {
>>> $result = $qry->fetchAll();
>>> }
>>> } catch (PDOException $e) {
>>> if ($inTransaction) {
>>> $db->rollBack();
>>> }
>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>> }
>>> return $result;
>>> }
>>>
>>> function execDatabase($sql) {
>>> global $db, $inTransaction;
>>> $result = array();
>>> try {
>>> $result = $db->exec($sql);
>>> } catch (PDOException $e) {
>>> if ($inTransaction) {
>>> $db->rollBack();
>>> }
>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>> }
>>> return $result;
>>> }
>>>
>>> function startTransaction() {
>>> global $db, $inTransaction;
>>> $db->beginTransaction();
>>> $inTransaction = true;
>>> }
>>>
>>> function commitTransaction() {
>>> global $db, $inTransaction;
>>> $inTransaction = false;
>>> if ($db->commit()) {
>>> return;
>>> }
>>> $db->rollBack();
>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>> }
>>>
>>> function rollbackTransaction() {
>>> global $db, $inTransaction;
>>> $inTransaction = false;
>>> if ($db->rollBack()) {
>>> return;
>>> }
>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>> }
>>>
>>> function lockTables($tables) {
>>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>>> WRITE');
>>> }
>>>
>>> function unlockTables() {
>>> return execDatabase('UNLOCK TABLES');
>>> }
>>
>> Kind of, and maybe a bit overkill. But personally I'd put it all in a
>> Database class. The code would be more flexible and less prone to errors.
>>
>
> Further, I would not have globals. I would pass $db in via the
> constructor. Likewise, I would have $inTransaction be a class variable
> which gets set by the method startTransaction().
>

That was part of the class, Sheldon.  In fact, I wouldn't even pass $db 
into the constructor; it (along with $inTransaction, as you note) would 
be class variables.  That way the rest of the program is completely 
independent of the database (and you can have more than one database 
active concurrently if you want).

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#1852

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 10:22 -0400
Message-ID<irlnmj$o96$1@dont-email.me>
In reply to#1849
On 5/26/2011 9:00 AM, Jerry Stuckle wrote:
> On 5/26/2011 8:09 AM, sheldonlg wrote:
>> On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
>>> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>>>> I new relatively new to PHP. I need your opinion if the following set
>>>> of database functions make sense:
>>>>
>>>> function openDatabase() {
>>>> global $db;
>>>> try {
>>>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>>>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>>>> $db->exec('SET NAMES latin2');
>>>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>>>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>>> register_shutdown_function('closeDatabase');
>>>> } catch (PDOException $e) {
>>>> return false;
>>>> }
>>>> return true;
>>>> }
>>>>
>>>> function closeDatabase() {
>>>> global $db, $inTransaction;
>>>> if ($inTransaction) {
>>>> $db->rollBack();
>>>> $inTransaction = false;
>>>> }
>>>> if (!is_null($db)) {
>>>> $db = null;
>>>> }
>>>> }
>>>>
>>>> function queryDatabase($sql) {
>>>> global $db, $inTransaction;
>>>> $result = array();
>>>> try {
>>>> $qry = $db->query($sql);
>>>> if (!empty($qry)) {
>>>> $result = $qry->fetchAll();
>>>> }
>>>> } catch (PDOException $e) {
>>>> if ($inTransaction) {
>>>> $db->rollBack();
>>>> }
>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>> }
>>>> return $result;
>>>> }
>>>>
>>>> function execDatabase($sql) {
>>>> global $db, $inTransaction;
>>>> $result = array();
>>>> try {
>>>> $result = $db->exec($sql);
>>>> } catch (PDOException $e) {
>>>> if ($inTransaction) {
>>>> $db->rollBack();
>>>> }
>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>> }
>>>> return $result;
>>>> }
>>>>
>>>> function startTransaction() {
>>>> global $db, $inTransaction;
>>>> $db->beginTransaction();
>>>> $inTransaction = true;
>>>> }
>>>>
>>>> function commitTransaction() {
>>>> global $db, $inTransaction;
>>>> $inTransaction = false;
>>>> if ($db->commit()) {
>>>> return;
>>>> }
>>>> $db->rollBack();
>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>> }
>>>>
>>>> function rollbackTransaction() {
>>>> global $db, $inTransaction;
>>>> $inTransaction = false;
>>>> if ($db->rollBack()) {
>>>> return;
>>>> }
>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>> }
>>>>
>>>> function lockTables($tables) {
>>>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>>>> WRITE');
>>>> }
>>>>
>>>> function unlockTables() {
>>>> return execDatabase('UNLOCK TABLES');
>>>> }
>>>
>>> Kind of, and maybe a bit overkill. But personally I'd put it all in a
>>> Database class. The code would be more flexible and less prone to
>>> errors.
>>>
>>
>> Further, I would not have globals. I would pass $db in via the
>> constructor. Likewise, I would have $inTransaction be a class variable
>> which gets set by the method startTransaction().
>>
>
> That was part of the class, Sheldon. In fact, I wouldn't even pass $db
> into the constructor; it (along with $inTransaction, as you note) would
> be class variables. That way the rest of the program is completely
> independent of the database (and you can have more than one database
> active concurrently if you want).

If you don't pass it in with the constructor, then you need something 
like a setDb($parameter) to set the class variable.  Passing it along 
with the constructor does not limit you to only one database 
concurrently.  After all, you could readily do

$dbObj1 = new DatabaseClass($db1);
$dbObj2 = new DatabaseClass($db2);

What passing it along inside the constructor does is (a) it saves a line 
of code each time in the invocation process(es) and (b) uniquely 
identifies a particular instance of the class.  Since the DatabaseClass 
_MUST_ have the db defined, there is no problem with passing it in with 
the constructor and no reason not to do so.

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1855

FromJerry Stuckle <jstucklex@attglobal.net>
Date2011-05-26 11:41 -0400
Message-ID<irlsc3$upg$1@dont-email.me>
In reply to#1852
On 5/26/2011 10:22 AM, sheldonlg wrote:
> On 5/26/2011 9:00 AM, Jerry Stuckle wrote:
>> On 5/26/2011 8:09 AM, sheldonlg wrote:
>>> On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
>>>> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>>>>> I new relatively new to PHP. I need your opinion if the following set
>>>>> of database functions make sense:
>>>>>
>>>>> function openDatabase() {
>>>>> global $db;
>>>>> try {
>>>>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>>>>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>>>>> $db->exec('SET NAMES latin2');
>>>>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>>>>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>>>> register_shutdown_function('closeDatabase');
>>>>> } catch (PDOException $e) {
>>>>> return false;
>>>>> }
>>>>> return true;
>>>>> }
>>>>>
>>>>> function closeDatabase() {
>>>>> global $db, $inTransaction;
>>>>> if ($inTransaction) {
>>>>> $db->rollBack();
>>>>> $inTransaction = false;
>>>>> }
>>>>> if (!is_null($db)) {
>>>>> $db = null;
>>>>> }
>>>>> }
>>>>>
>>>>> function queryDatabase($sql) {
>>>>> global $db, $inTransaction;
>>>>> $result = array();
>>>>> try {
>>>>> $qry = $db->query($sql);
>>>>> if (!empty($qry)) {
>>>>> $result = $qry->fetchAll();
>>>>> }
>>>>> } catch (PDOException $e) {
>>>>> if ($inTransaction) {
>>>>> $db->rollBack();
>>>>> }
>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>> }
>>>>> return $result;
>>>>> }
>>>>>
>>>>> function execDatabase($sql) {
>>>>> global $db, $inTransaction;
>>>>> $result = array();
>>>>> try {
>>>>> $result = $db->exec($sql);
>>>>> } catch (PDOException $e) {
>>>>> if ($inTransaction) {
>>>>> $db->rollBack();
>>>>> }
>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>> }
>>>>> return $result;
>>>>> }
>>>>>
>>>>> function startTransaction() {
>>>>> global $db, $inTransaction;
>>>>> $db->beginTransaction();
>>>>> $inTransaction = true;
>>>>> }
>>>>>
>>>>> function commitTransaction() {
>>>>> global $db, $inTransaction;
>>>>> $inTransaction = false;
>>>>> if ($db->commit()) {
>>>>> return;
>>>>> }
>>>>> $db->rollBack();
>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>> }
>>>>>
>>>>> function rollbackTransaction() {
>>>>> global $db, $inTransaction;
>>>>> $inTransaction = false;
>>>>> if ($db->rollBack()) {
>>>>> return;
>>>>> }
>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>> }
>>>>>
>>>>> function lockTables($tables) {
>>>>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>>>>> WRITE');
>>>>> }
>>>>>
>>>>> function unlockTables() {
>>>>> return execDatabase('UNLOCK TABLES');
>>>>> }
>>>>
>>>> Kind of, and maybe a bit overkill. But personally I'd put it all in a
>>>> Database class. The code would be more flexible and less prone to
>>>> errors.
>>>>
>>>
>>> Further, I would not have globals. I would pass $db in via the
>>> constructor. Likewise, I would have $inTransaction be a class variable
>>> which gets set by the method startTransaction().
>>>
>>
>> That was part of the class, Sheldon. In fact, I wouldn't even pass $db
>> into the constructor; it (along with $inTransaction, as you note) would
>> be class variables. That way the rest of the program is completely
>> independent of the database (and you can have more than one database
>> active concurrently if you want).
>
> If you don't pass it in with the constructor, then you need something
> like a setDb($parameter) to set the class variable. Passing it along
> with the constructor does not limit you to only one database
> concurrently. After all, you could readily do
>
> $dbObj1 = new DatabaseClass($db1);
> $dbObj2 = new DatabaseClass($db2);
>
> What passing it along inside the constructor does is (a) it saves a line
> of code each time in the invocation process(es) and (b) uniquely
> identifies a particular instance of the class. Since the DatabaseClass
> _MUST_ have the db defined, there is no problem with passing it in with
> the constructor and no reason not to do so.
>

A better way would be to pass the basic information to the constructor - 
i.e. the host, userid, password and database name.  Let the constructor 
build the database object.  That way it is completely encapsulated and 
the rest of the program is not dependent on a database object.  If he 
later finds he wants to change database objects (i.e. maybe PDO is to 
slow and he wants to use mysqli), he can do so without changing anything 
in the rest of the program. The class is now more fully encapsulated.

A very good reason for not passing it to the constructor.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#1857

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 12:07 -0400
Message-ID<irltrp$88q$1@dont-email.me>
In reply to#1855
On 5/26/2011 11:41 AM, Jerry Stuckle wrote:
> On 5/26/2011 10:22 AM, sheldonlg wrote:
>> On 5/26/2011 9:00 AM, Jerry Stuckle wrote:
>>> On 5/26/2011 8:09 AM, sheldonlg wrote:
>>>> On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
>>>>> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>>>>>> I new relatively new to PHP. I need your opinion if the following set
>>>>>> of database functions make sense:
>>>>>>
>>>>>> function openDatabase() {
>>>>>> global $db;
>>>>>> try {
>>>>>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>>>>>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>>>>>> $db->exec('SET NAMES latin2');
>>>>>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>>>>>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>>>>> register_shutdown_function('closeDatabase');
>>>>>> } catch (PDOException $e) {
>>>>>> return false;
>>>>>> }
>>>>>> return true;
>>>>>> }
>>>>>>
>>>>>> function closeDatabase() {
>>>>>> global $db, $inTransaction;
>>>>>> if ($inTransaction) {
>>>>>> $db->rollBack();
>>>>>> $inTransaction = false;
>>>>>> }
>>>>>> if (!is_null($db)) {
>>>>>> $db = null;
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> function queryDatabase($sql) {
>>>>>> global $db, $inTransaction;
>>>>>> $result = array();
>>>>>> try {
>>>>>> $qry = $db->query($sql);
>>>>>> if (!empty($qry)) {
>>>>>> $result = $qry->fetchAll();
>>>>>> }
>>>>>> } catch (PDOException $e) {
>>>>>> if ($inTransaction) {
>>>>>> $db->rollBack();
>>>>>> }
>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>> }
>>>>>> return $result;
>>>>>> }
>>>>>>
>>>>>> function execDatabase($sql) {
>>>>>> global $db, $inTransaction;
>>>>>> $result = array();
>>>>>> try {
>>>>>> $result = $db->exec($sql);
>>>>>> } catch (PDOException $e) {
>>>>>> if ($inTransaction) {
>>>>>> $db->rollBack();
>>>>>> }
>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>> }
>>>>>> return $result;
>>>>>> }
>>>>>>
>>>>>> function startTransaction() {
>>>>>> global $db, $inTransaction;
>>>>>> $db->beginTransaction();
>>>>>> $inTransaction = true;
>>>>>> }
>>>>>>
>>>>>> function commitTransaction() {
>>>>>> global $db, $inTransaction;
>>>>>> $inTransaction = false;
>>>>>> if ($db->commit()) {
>>>>>> return;
>>>>>> }
>>>>>> $db->rollBack();
>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>> }
>>>>>>
>>>>>> function rollbackTransaction() {
>>>>>> global $db, $inTransaction;
>>>>>> $inTransaction = false;
>>>>>> if ($db->rollBack()) {
>>>>>> return;
>>>>>> }
>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>> }
>>>>>>
>>>>>> function lockTables($tables) {
>>>>>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>>>>>> WRITE');
>>>>>> }
>>>>>>
>>>>>> function unlockTables() {
>>>>>> return execDatabase('UNLOCK TABLES');
>>>>>> }
>>>>>
>>>>> Kind of, and maybe a bit overkill. But personally I'd put it all in a
>>>>> Database class. The code would be more flexible and less prone to
>>>>> errors.
>>>>>
>>>>
>>>> Further, I would not have globals. I would pass $db in via the
>>>> constructor. Likewise, I would have $inTransaction be a class variable
>>>> which gets set by the method startTransaction().
>>>>
>>>
>>> That was part of the class, Sheldon. In fact, I wouldn't even pass $db
>>> into the constructor; it (along with $inTransaction, as you note) would
>>> be class variables. That way the rest of the program is completely
>>> independent of the database (and you can have more than one database
>>> active concurrently if you want).
>>
>> If you don't pass it in with the constructor, then you need something
>> like a setDb($parameter) to set the class variable. Passing it along
>> with the constructor does not limit you to only one database
>> concurrently. After all, you could readily do
>>
>> $dbObj1 = new DatabaseClass($db1);
>> $dbObj2 = new DatabaseClass($db2);
>>
>> What passing it along inside the constructor does is (a) it saves a line
>> of code each time in the invocation process(es) and (b) uniquely
>> identifies a particular instance of the class. Since the DatabaseClass
>> _MUST_ have the db defined, there is no problem with passing it in with
>> the constructor and no reason not to do so.
>>
>
> A better way would be to pass the basic information to the constructor -
> i.e. the host, userid, password and database name. Let the constructor
> build the database object. That way it is completely encapsulated and
> the rest of the program is not dependent on a database object. If he
> later finds he wants to change database objects (i.e. maybe PDO is to
> slow and he wants to use mysqli), he can do so without changing anything
> in the rest of the program. The class is now more fully encapsulated.
>
> A very good reason for not passing it to the constructor.

Good point.  It would be best to pass those three instead.  Point was 
that I was making is that it is best to pass what is _ALWAYS_ needed 
through the constructor.  Your suggestion is better.

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1858

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 12:14 -0400
Message-ID<irlu9b$br6$1@dont-email.me>
In reply to#1857
On 5/26/2011 12:07 PM, sheldonlg wrote:
> On 5/26/2011 11:41 AM, Jerry Stuckle wrote:
>> On 5/26/2011 10:22 AM, sheldonlg wrote:
>>> On 5/26/2011 9:00 AM, Jerry Stuckle wrote:
>>>> On 5/26/2011 8:09 AM, sheldonlg wrote:
>>>>> On 5/25/2011 5:37 PM, Jerry Stuckle wrote:
>>>>>> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>>>>>>> I new relatively new to PHP. I need your opinion if the following
>>>>>>> set
>>>>>>> of database functions make sense:
>>>>>>>
>>>>>>> function openDatabase() {
>>>>>>> global $db;
>>>>>>> try {
>>>>>>> $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
>>>>>>> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
>>>>>>> $db->exec('SET NAMES latin2');
>>>>>>> $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
>>>>>>> $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
>>>>>>> register_shutdown_function('closeDatabase');
>>>>>>> } catch (PDOException $e) {
>>>>>>> return false;
>>>>>>> }
>>>>>>> return true;
>>>>>>> }
>>>>>>>
>>>>>>> function closeDatabase() {
>>>>>>> global $db, $inTransaction;
>>>>>>> if ($inTransaction) {
>>>>>>> $db->rollBack();
>>>>>>> $inTransaction = false;
>>>>>>> }
>>>>>>> if (!is_null($db)) {
>>>>>>> $db = null;
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> function queryDatabase($sql) {
>>>>>>> global $db, $inTransaction;
>>>>>>> $result = array();
>>>>>>> try {
>>>>>>> $qry = $db->query($sql);
>>>>>>> if (!empty($qry)) {
>>>>>>> $result = $qry->fetchAll();
>>>>>>> }
>>>>>>> } catch (PDOException $e) {
>>>>>>> if ($inTransaction) {
>>>>>>> $db->rollBack();
>>>>>>> }
>>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>>> }
>>>>>>> return $result;
>>>>>>> }
>>>>>>>
>>>>>>> function execDatabase($sql) {
>>>>>>> global $db, $inTransaction;
>>>>>>> $result = array();
>>>>>>> try {
>>>>>>> $result = $db->exec($sql);
>>>>>>> } catch (PDOException $e) {
>>>>>>> if ($inTransaction) {
>>>>>>> $db->rollBack();
>>>>>>> }
>>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>>> }
>>>>>>> return $result;
>>>>>>> }
>>>>>>>
>>>>>>> function startTransaction() {
>>>>>>> global $db, $inTransaction;
>>>>>>> $db->beginTransaction();
>>>>>>> $inTransaction = true;
>>>>>>> }
>>>>>>>
>>>>>>> function commitTransaction() {
>>>>>>> global $db, $inTransaction;
>>>>>>> $inTransaction = false;
>>>>>>> if ($db->commit()) {
>>>>>>> return;
>>>>>>> }
>>>>>>> $db->rollBack();
>>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>>> }
>>>>>>>
>>>>>>> function rollbackTransaction() {
>>>>>>> global $db, $inTransaction;
>>>>>>> $inTransaction = false;
>>>>>>> if ($db->rollBack()) {
>>>>>>> return;
>>>>>>> }
>>>>>>> error(ERRMSG_DATABASE_OPERATION_FAILED);
>>>>>>> }
>>>>>>>
>>>>>>> function lockTables($tables) {
>>>>>>> return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
>>>>>>> WRITE');
>>>>>>> }
>>>>>>>
>>>>>>> function unlockTables() {
>>>>>>> return execDatabase('UNLOCK TABLES');
>>>>>>> }
>>>>>>
>>>>>> Kind of, and maybe a bit overkill. But personally I'd put it all in a
>>>>>> Database class. The code would be more flexible and less prone to
>>>>>> errors.
>>>>>>
>>>>>
>>>>> Further, I would not have globals. I would pass $db in via the
>>>>> constructor. Likewise, I would have $inTransaction be a class variable
>>>>> which gets set by the method startTransaction().
>>>>>
>>>>
>>>> That was part of the class, Sheldon. In fact, I wouldn't even pass $db
>>>> into the constructor; it (along with $inTransaction, as you note) would
>>>> be class variables. That way the rest of the program is completely
>>>> independent of the database (and you can have more than one database
>>>> active concurrently if you want).
>>>
>>> If you don't pass it in with the constructor, then you need something
>>> like a setDb($parameter) to set the class variable. Passing it along
>>> with the constructor does not limit you to only one database
>>> concurrently. After all, you could readily do
>>>
>>> $dbObj1 = new DatabaseClass($db1);
>>> $dbObj2 = new DatabaseClass($db2);
>>>
>>> What passing it along inside the constructor does is (a) it saves a line
>>> of code each time in the invocation process(es) and (b) uniquely
>>> identifies a particular instance of the class. Since the DatabaseClass
>>> _MUST_ have the db defined, there is no problem with passing it in with
>>> the constructor and no reason not to do so.
>>>
>>
>> A better way would be to pass the basic information to the constructor -
>> i.e. the host, userid, password and database name. Let the constructor
>> build the database object. That way it is completely encapsulated and
>> the rest of the program is not dependent on a database object. If he
>> later finds he wants to change database objects (i.e. maybe PDO is to
>> slow and he wants to use mysqli), he can do so without changing anything
>> in the rest of the program. The class is now more fully encapsulated.
>>
>> A very good reason for not passing it to the constructor.
>
> Good point. It would be best to pass those three instead. Point was that
> I was making is that it is best to pass what is _ALWAYS_ needed through
> the constructor. Your suggestion is better.
>
four, not three.

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1919

Fromsophal chao <w3cyberlearning@gmail.com>
Date2011-05-29 13:41 -0700
Message-ID<1770ab56-04c0-438e-93ba-cc6a71a70067@x1g2000yqb.googlegroups.com>
In reply to#1843
On May 25, 5:37 pm, Jerry Stuckle <jstuck...@attglobal.net> wrote:
> On 5/25/2011 1:17 PM, Jivanmukta wrote:
>
>
>
> > I new relatively new to PHP. I need your opinion if the following set
> > of database functions make sense:
>
> > function openDatabase() {
> >      global $db;
> >    try {
> >            $db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
> > MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
> >            $db->exec('SET NAMES latin2');
> >            $db->exec('SET CHARACTER SET latin2 COLLATE latin2_general_ci');
> >            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
> >            register_shutdown_function('closeDatabase');
> >    } catch (PDOException $e) {
> >            return false;
> >    }
> >      return true;
> > }
>
> > function closeDatabase() {
> >    global $db, $inTransaction;
> >    if ($inTransaction) {
> >            $db->rollBack();
> >            $inTransaction = false;
> >    }
> >            if (!is_null($db)) {
> >            $db = null;
> >    }
> > }
>
> > function queryDatabase($sql) {
> >    global $db, $inTransaction;
> >    $result = array();
> >    try {
> >            $qry = $db->query($sql);
> >            if (!empty($qry)) {
> >                    $result = $qry->fetchAll();
> >            }
> >    } catch (PDOException $e) {
> >            if ($inTransaction) {
> >                    $db->rollBack();
> >            }
> >            error(ERRMSG_DATABASE_OPERATION_FAILED);
> >    }
> >    return $result;
> > }
>
> > function execDatabase($sql) {
> >    global $db, $inTransaction;
> >    $result = array();
> >    try {
> >            $result = $db->exec($sql);
> >    } catch (PDOException $e) {
> >            if ($inTransaction) {
> >                    $db->rollBack();
> >            }
> >            error(ERRMSG_DATABASE_OPERATION_FAILED);
> >    }
> >    return $result;
> > }
>
> > function startTransaction() {
> >            global $db, $inTransaction;
> >            $db->beginTransaction();
> >    $inTransaction = true;
> > }
>
> > function commitTransaction() {
> >            global $db, $inTransaction;
> >    $inTransaction = false;
> >            if ($db->commit()) {
> >            return;
> >            }
> >            $db->rollBack();
> >            error(ERRMSG_DATABASE_OPERATION_FAILED);
> > }
>
> > function rollbackTransaction() {
> >            global $db, $inTransaction;
> >    $inTransaction = false;
> >            if ($db->rollBack()) {
> >            return;
> >            }
> >            error(ERRMSG_DATABASE_OPERATION_FAILED);
> > }
>
> > function lockTables($tables) {
> >    return execDatabase('LOCK TABLES ' . join(' WRITE, ', $tables) . '
> > WRITE');
> > }
>
> > function unlockTables() {
> >    return execDatabase('UNLOCK TABLES');
> > }
>
> Kind of, and maybe a bit overkill.  But personally I'd put it all in a
> Database class.  The code would be more flexible and less prone to errors.
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstuck...@attglobal.net
> ==================

You can connect use singleton. I think this link is good for basic
tutorial.

http://www.w3cyberlearning.com/tutorial/php_pdomysql.php

[toc] | [prev] | [next] | [standalone]


#1921

FromJerry Stuckle <jstucklex@attglobal.net>
Date2011-05-29 23:12 -0400
Message-ID<irv1vj$i46$1@dont-email.me>
In reply to#1919
On 5/29/2011 4:41 PM, sophal chao wrote:

>
> You can connect use singleton. I think this link is good for basic
> tutorial.
>
> http://www.w3cyberlearning.com/tutorial/php_pdomysql.php

Singletons have their uses.  But they are not appropriate for all 
situations, and have nothing to do with the ops question.

But then spamming your site is also frowned on in this newsgroup, 
especially when you don't say it is your site.  And it's a pretty poor 
"tutorial".

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#1850

FromJohnT <john@example.com>
Date2011-05-26 13:05 +0000
Message-ID<irlj7n$oo5$1@dont-email.me>
In reply to#1842
On Wed, 25 May 2011 10:17:48 -0700, Jivanmukta wrote:

> I new relatively new to PHP. I need your opinion if the following set of
> database functions make sense:
> 
> function openDatabase() {
>     global $db;
> 	try {
> 		$db = new PDO('mysql:host=' . MYSQL_SERVER . ';dbname=' .
> MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD);
> 		$db->exec('SET NAMES latin2');
> 		$db->exec('SET CHARACTER SET latin2 COLLATE 
latin2_general_ci');
> 		$db->setAttribute(PDO::ATTR_ERRMODE, 
PDO::ERRMODE_EXCEPTION);
> 		register_shutdown_function('closeDatabase');
> 	} catch (PDOException $e) {
> 		return false;
> 	}
>     return true;
> }

Looks like real overkill to me.
Do you really need to use PDO ?
Whats wrong with the regular PHP mysql_XXXX() functions ?

[toc] | [prev] | [next] | [standalone]


#1851

FromJivanmukta <jivanmukta@poczta.onet.pl>
Date2011-05-26 06:37 -0700
Message-ID<9c7045e4-3415-4dfd-a3f7-96ab2de8b623@hd10g2000vbb.googlegroups.com>
In reply to#1850
> Do you really need to use PDO ?
> Whats wrong with the regular PHP mysql_XXXX() functions ?

I could not solve some problem with mysqli and this problem did not
occur using PDO. Nobody could help me with this problem on newsgroups.
If I remember correctly fetching some nonempty query returned false in
mysqli, in PDO the same query returned proper set.

[toc] | [prev] | [next] | [standalone]


#1853

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 10:30 -0400
Message-ID<irlo6e$rma$1@dont-email.me>
In reply to#1851
On 5/26/2011 9:37 AM, Jivanmukta wrote:
>> Do you really need to use PDO ?
>> Whats wrong with the regular PHP mysql_XXXX() functions ?
>
> I could not solve some problem with mysqli and this problem did not
> occur using PDO. Nobody could help me with this problem on newsgroups.
> If I remember correctly fetching some nonempty query returned false in
> mysqli, in PDO the same query returned proper set.

If the query is non-empty, you should have no problem in fetching the 
results with the standard mysql functions.  Why were you even bothering 
with mysqli?  Look for mysql_query, mysql_fetch_assoc, and 
mysql_fetch_array in www.php.net.  They are all you need.

What I regularly use most is:

$theArray = array();
$result = mysql_query("The query text");
if (FALSE !== $result) {
   while ($row = mysql_fetch_assoc($result) {
     $theArray[] = $row;
   }
}

if (count($theArray)) {
   .....
}


You could even put the query into your database class as a 
getArray($query) method.

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1854

Fromsheldonlg <sheldonlg@thevillages.net>
Date2011-05-26 10:33 -0400
Message-ID<irloar$rma$2@dont-email.me>
In reply to#1853
On 5/26/2011 10:30 AM, sheldonlg wrote:
> On 5/26/2011 9:37 AM, Jivanmukta wrote:
>>> Do you really need to use PDO ?
>>> Whats wrong with the regular PHP mysql_XXXX() functions ?
>>
>> I could not solve some problem with mysqli and this problem did not
>> occur using PDO. Nobody could help me with this problem on newsgroups.
>> If I remember correctly fetching some nonempty query returned false in
>> mysqli, in PDO the same query returned proper set.
>
> If the query is non-empty, you should have no problem in fetching the
> results with the standard mysql functions. Why were you even bothering
> with mysqli? Look for mysql_query, mysql_fetch_assoc, and
> mysql_fetch_array in www.php.net. They are all you need.
>
> What I regularly use most is:
>
> $theArray = array();
> $result = mysql_query("The query text");
> if (FALSE !== $result) {
> while ($row = mysql_fetch_assoc($result) {
> $theArray[] = $row;
> }
> }
>
> if (count($theArray)) {
> .....
> }
>
>
> You could even put the query into your database class as a
> getArray($query) method.
>

Ooops.  Make that
if (count($theArray) > 0) {

-- 
Shelly

[toc] | [prev] | [next] | [standalone]


#1856

FromJerry Stuckle <jstucklex@attglobal.net>
Date2011-05-26 11:43 -0400
Message-ID<irlsg2$upg$2@dont-email.me>
In reply to#1851
On 5/26/2011 9:37 AM, Jivanmukta wrote:
>> Do you really need to use PDO ?
>> Whats wrong with the regular PHP mysql_XXXX() functions ?
>
> I could not solve some problem with mysqli and this problem did not
> occur using PDO. Nobody could help me with this problem on newsgroups.
> If I remember correctly fetching some nonempty query returned false in
> mysqli, in PDO the same query returned proper set.

If the mysql query returned false, there was a problem with the query. 
We asked for more information on the query and gave you some debugging 
tips, but you never responded.

So yes, we did try to help you here.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#1859

FromMichael Fesser <netizen@gmx.de>
Date2011-05-26 19:48 +0200
Message-ID<je4tt6hae3jv4nn45g37lsfm5s0o8ov8qq@mfesser.de>
In reply to#1850
.oO(JohnT)

>Looks like real overkill to me.
>Do you really need to use PDO ?
>Whats wrong with the regular PHP mysql_XXXX() functions ?

The mysql_* functions are a bit outdated and mysqli_* isn't as elegant
as PDO. Nothing wrong with using it, especially if you want to use some
"advanced" features like prepared statements. It's a nice and clean
interface and easy to encapsulate and extend in your own DB class as
already mentioned.

Micha

[toc] | [prev] | [next] | [standalone]


#1928

FromErwin Moller <Since_humans_read_this_I_am_spammed_too_much@spamyourself.com>
Date2011-05-30 10:56 +0200
Message-ID<4de35bb2$0$49039$e4fe514c@news.xs4all.nl>
In reply to#1859
On 5/26/2011 7:48 PM, Michael Fesser wrote:
> .oO(JohnT)
>
>> Looks like real overkill to me.
>> Do you really need to use PDO ?
>> Whats wrong with the regular PHP mysql_XXXX() functions ?
>
> The mysql_* functions are a bit outdated and mysqli_* isn't as elegant
> as PDO. Nothing wrong with using it, especially if you want to use some
> "advanced" features like prepared statements. It's a nice and clean
> interface and easy to encapsulate and extend in your own DB class as
> already mentioned.
>
> Micha

I second that. I have been using PDO in my latest projects, and I like 
it so far.
Only thing to take care of is dates. (I Insert them as a string and 
Postgresql happily takes them correctly, but this could give problems on 
other backends.)

Regards,
Erwin Moller

-- 
"That which can be asserted without evidence, can be dismissed without 
evidence."
-- Christopher Hitchens

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.php


csiph-web