I'm making a counter using DB,
1 <?php
2 require_once 'DB.php';
3
4 $sql_type = 'mysql';
5 $sql_user = 'root';
6 $sql_pass = '';
7 $sql_host = 'localhost';
8 $sql_db = 'valerie';
9
10 $dsn =
"$sql_type://$sql_user:[EMAIL PROTECTED]/$sql_db";
11 $db = DB::connect($dsn);
12
13 // autoExecute config
14 $table_name = 'counter';
15 $fields_values = array('counter' => $counter++);
16 $where = "page = 'index'";
17
18 $result = $db->query("LOCK TABLES counter WRITE");
19 if ( DB::isError($result) ) {
20 die($result->getMessage());
21 }
22
23 $sql = "SELECT counter FROM $table_name WHERE $where";
24 $result = $db->query($sql);
25 if ( DB::isError($result) ) {
26 die($result->getMessage());
27 }
28 list($counter) = $result->fetchRow();
29
30 // update counter
31 $result = $db->autoExecute($table_name, $fields_values,
DB_AUTOQUERY_UPDATE, $where);
32 if ( DB::isError($result) ) {
33 die($result->getMessage());
34 }
35
36 $result = $db->query("UNLOCK TABLES");
37 if ( DB::isError($result) ) {
38 die($result->getMessage());
39 }
40
41 die;
42 ?>
it works well, but I don't think it's efficient calling DB::isError
everytime, so (inspired by Advanced PHP Programming book by Mr. George
Schlossnagle) I made a class (PHP 4.3.9) to handle it . (instead of using
functions and must call boring 'global' at the top of each function)
1 <?php
2 /**
3 * PEAR DB
4 */
5 require_once 'DB.php';
6
7 class DBku
8 {
9 // protected
10 var $type;
11 var $user;
12 var $pass;
13 var $host;
14 var $db;
15 var $dbhandler;
16
17 // {{{
18 // public
19 function __construct($type, $user, $pass, $host, $db)
20 {
21 $this->type = $type;
22 $this->user = $user;
23 $this->pass = $pass;
24 $this->host = $host;
25 $this->db = $db;
26 }
27 // }}}
28
29 // {{{
30 // public
31 function connect()
32 {
33 $this->dbhandler =
DB::connect($this->type,"://",$this->user,":",$this->pass,"@",$this->host,"/
",$this->db);
34 $this->error($this->dbhandler);
35 }
36 // }}}
37
38 // {{{
39 // public
40 function execute($query)
41 {
42 if ( !$this->dbhandler ) {
43 $this->connect();
44 }
45 $ret = $this->dbhandler->query($query);
46 $this->error($ret);
47 }
48 // }}}
49
50 // {{{
51 // protected
52 function error($er_value)
53 {
54 if (DB::isError($er_value)) {
55 echo 'Standard Message: ' . $er_value->getMessage() .
"\n";
56 echo 'Standard Code: ' . $er_value->getCode() . "\n";
57 echo 'DBMS/User Message: ' . $er_value->getUserInfo() .
"\n";
58 echo 'DBMS/Debug Message: ' . $er_value->getDebugInfo() .
"\n";
59 die;
60 }
61 }
62 // }}}
63 }
64
65 $sql = new DBku('mysql', 'root', '', 'localhost', 'valerie');
66 var_dump($sql);
67 $sql->execute('SELECT * FROM country');
68 die;
69 ?>
my problem is : everytime I execute this file in CLI mode I always got this
:
E:\php\pear>php config_valerie4.inc.php
object(DBku)#1 (6) {
["type"]=>
string(5) "mysql"
["user"]=>
string(4) "root"
["pass"]=>
string(0) ""
["host"]=>
string(9) "localhost"
["db"]=>
string(7) "valerie"
["dbhandler"]=>
NULL
}
Standard Message: DB Error: no database selected
Standard Code: -14
DBMS/User Message: SELECT * FROM country [nativecode=1046 ** No Database
Selected]
DBMS/Debug Message: SELECT * FROM country [nativecode=1046 ** No Database
Selected]
How come the message said I didn't select database ??
I also throw this thread to php-general mailing lists because when somebody
talked about OOP then many arguments would come from many people there and I
just enjoy to hear (read) it :)
So, Opinions (good or bad things), Suggestions, Corrections to my code
(especially idea to make my class shorter and would be compatible in PHP4 &
5) would be very welcome.
Thank you.
Val�rie Delon
�tudiante
--
On a besoin d'apprendre beacoup plus
Quelqu'un croit c'est trop
Mais j'crois que ce n'est pas assez
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php