/[docman]/dbi/dbi_mysql.php
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /dbi/dbi_mysql.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Wed Jun 20 10:15:24 2001 UTC (21 years, 7 months ago) by dpavlin
Branch: MAIN
CVS Tags: HEAD
added dbi-php classes (just in CVS not in distribution .tar.gz) from
http://pil.dk/downloads/ to support users in SQL databases

1 <?
2
3 /*
4 * $Id: dbi_mysql.php,v 1.5 2001/04/03 14:48:31 cfsl Exp $
5 *
6 * This class is based on the Perl DBI.
7 * New functionality should be added accordingly.
8 * Please refer to the DBI documentation (perldoc DBI).
9 *
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
14 *
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 */
24
25 class DBI {
26 // Unauthorized
27 var $Driver_name = "mySQL";
28 var $Name;
29
30 var $session;
31 var $debug = 0;
32
33 var $err;
34 var $errstr="";
35 var $RaiseError = 1;
36
37 function DBI ($db, $user, $password) {
38 $this->session = mysql_pconnect('localhost', $user, $password);
39 mysql_select_db($db,$this->session);
40 $this->Name = $db;
41 }
42
43 function prepare ($query) {
44 return new STH($this, $this->session, $query, $this->debug);
45 }
46
47 function dbh_do($query) {
48 // --OBS-- returns -1 on failure, 0 is a valid return from this function!
49 $res = mysql_query($query, $this-> session);
50 if ($res) {
51 $this->err = 0;
52 $this->errstr = "";
53 return mysql_affected_rows($this->session);
54 } else {
55 $this->err = mysql_errno($this->session);
56 $this->errstr = mysql_error($this->session);
57 return -1;
58 }
59 }
60
61 function insert_id() {
62 return mysql_insert_id($this->session);
63 }
64
65 function autocommit ($value) {
66 echo "<br><b>Warning: Transactions not supported by this driver.</b><br>";
67 return 0;
68 }
69
70 function commit () {
71 echo "<br><b>Warning: Transactions not supported by this driver.</b><br>";
72 return 0;
73 }
74
75 function rollback () {
76 echo "<br><b>Warning: Transactions not supported by this driver.</b><br>";
77 return 0;
78 }
79
80 function quote ($str) {
81 if (get_magic_quotes_gpc()) {
82 $str = stripslashes($str);
83 }
84 return "'".AddSlashes($str)."'";
85 }
86 }
87
88 class STH {
89 var $query;
90 var $debug;
91 var $session;
92 var $res;
93 var $row;
94 var $placeholders;
95 var $dbi;
96
97 function STH (&$dbi, $session, $query, $debug) {
98 $this->dbi = &$dbi;
99 $this->session = $session;
100 $this->query = $query;
101 $this->debug = $debug;
102
103 // Scan for placeholders
104
105 $this->placeholders = array();
106 $quote = '';
107 for ($i = 0; $i < strlen($query); ++$i) {
108 if ($query[$i] == "'") {
109 if (empty($quote)) {
110 $quote = "'";
111 } elseif ($quote == "'") {
112 $quote = '';
113 }
114 } elseif ($query[$i] == '"') {
115 if (empty($quote)) {
116 $quote = '"';
117 } elseif ($quote == '"') {
118 $quote = '';
119 }
120 } elseif ($query[$i] == '?') {
121 if (empty($quote)) {
122 array_push($this->placeholders, $i);
123 }
124 }
125 }
126 }
127
128 function execute () {
129 global $SERVER_NAME;
130
131 $numargs = func_num_args();
132 $arg_list = func_get_args();
133
134 $parms = array();
135
136 for ($i = 0; $i < $numargs; $i++) {
137 if (is_array($arg_list[$i])) {
138 while (list($dummy,$parm) = each ($arg_list[$i])) {
139 array_push($parms, $parm);
140 }
141 } else {
142 array_push($parms,$arg_list[$i]);
143 }
144 }
145
146 if (sizeof($parms) != sizeof($this->placeholders)) {
147 print "<br><b>SQL Query contains ".sizeof($this->placeholders)." placeholders but ".sizeof($parms)." was passed</b><br>";
148 exit;
149 }
150
151 if (sizeof($parms) > 0) {
152 $query = substr($this->query, 0, $this->placeholders[0]);
153 for ($i = 0; $i < sizeof($parms) - 1; ++$i) {
154 $query .= $this->dbi->quote($parms[$i]) . substr($this->query, $this->placeholders[$i] + 1, $this->placeholders[$i + 1] - $this->placeholders[$i] - 1);
155 }
156 $query .= $this->dbi->quote($parms[$i]) . substr($this->query, $this->placeholders[$i] + 1);
157 } else {
158 $query = $this->query;
159 }
160
161 if ($this->debug) { // Log the query
162 $fd = fopen("/tmp/dbi.$SERVER_NAME.log", "a") or die ("Couldn't append to file");
163 fputs($fd, $this->query."\n==================\n");
164 fclose($fd);
165 }
166
167 $this->res = @mysql_query($query, $this->session);
168 if (!$this->res) {
169 if ($this->dbi->RaiseError) {
170 print "<br><b>Could not execute SQL query: \" ". $query . "\"</b><br>";
171 print "<br>".mysql_errno($this->session) . " " .mysql_error($this->session)."<br>";
172 exit;
173 }
174 $this->dbi->errstr = mysql_error($this->session);
175 $this->dbi->err = mysql_errno($this->session);
176 }
177 $this->row = 0;
178 return $this->res;
179 }
180
181 function fetchrow_array () {
182 return mysql_fetch_row($this->res);
183 $this->row++;
184 }
185
186 function fetchrow_hash () {
187 return mysql_fetch_array($this->res);
188 $this->row++;
189 }
190
191 function finish () {
192 mysql_free_result($this->res);
193 }
194
195 function rows () {
196 return mysql_num_rows($this->res);
197 }
198 }
199 ?>

  ViewVC Help
Powered by ViewVC 1.1.26