Query.php

Go to the documentation of this file.
00001 <?php 00002 00003 /* 00004 * $Id: Query.php,v 1.1 2004/05/21 11:21:25 micha Exp $ 00005 * 00006 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00007 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00008 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00009 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00010 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00011 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00012 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00013 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00014 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00015 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00016 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00017 * 00018 * This software consists of voluntary contributions made by many individuals 00019 * and is licensed under the LGPL. For more information please see 00020 * <http://creole.phpdb.org>. 00021 */ 00022 00040 class Query 00041 { 00043 var $conn; 00044 00046 var $sql; 00047 00049 var $max = 0; 00050 00052 var $start = 0; 00053 00059 function Query(/*Connection*/ &$conn, $sql = null) 00060 { 00061 if (! is_a($conn, 'Connection')) { 00062 trigger_error ( 00063 "Query::Query(): parameter 1 not of type 'Connection' !", 00064 E_USER_ERROR 00065 ); 00066 } 00067 00068 $this->conn =& $conn; 00069 $this->sql = $sql; 00070 } 00071 00076 function setSql($sql) 00077 { 00078 $this->sql = $sql; 00079 } 00080 00085 function setStart($v) 00086 { 00087 $this->start = $v; 00088 } 00089 00095 function setMax($v) 00096 { 00097 $this->max = $v; 00098 } 00099 00104 function &getRows() 00105 { 00106 $stmt =& $this->conn->createStatement(); 00107 if ($this->max) $stmt->setLimit($this->max); 00108 if ($this->start) $stmt->setOffset($this->start); 00109 $rs =& $stmt->executeQuery($this->sql); 00110 $e = null; 00111 00112 if (Creole::isError($rs)) { 00113 return $rs; 00114 } 00115 00116 $results = array(); 00117 while(($e = $rs->next()) === true) { 00118 $results[] =& $rs->getRow(); 00119 } 00120 00121 if (Creole::isError($e)) { 00122 return $e; 00123 } 00124 00125 $rs->close(); 00126 $stmt->close(); 00127 return $results; 00128 } 00129 00135 function &getRow() 00136 { 00137 $stmt =& $this->conn->createStatement(); 00138 if ($this->max) $stmt->setLimit($this->max); 00139 if ($this->start) $stmt->setOffset($this->start); 00140 $rs =& $stmt->executeQuery($this->sql); 00141 00142 if (Creole::isError($rs)) { 00143 return $rs; 00144 } 00145 00146 $e = $rs->next(); 00147 00148 if (Creole::isError($e)) { 00149 return $e; 00150 } 00151 00152 $results = $rs->getRow(); 00153 $rs->close(); 00154 $stmt->close(); 00155 return $results; 00156 } 00157 00162 function &getCol() 00163 { 00164 $stmt =& $this->conn->createStatement(); 00165 if ($this->max) $stmt->setLimit($this->max); 00166 if ($this->start) $stmt->setOffset($this->start); 00167 $rs =& $stmt->executeQuery($this->sql); 00168 $e = null; 00169 00170 if (Creole::isError($rs)) { 00171 return $rs; 00172 } 00173 00174 $results = array(); 00175 while(($e = $rs->next()) === true) { 00176 $results[] =& array_shift($rs->getRow()); 00177 } 00178 00179 if (Creole::isError($e)) { 00180 return $e; 00181 } 00182 00183 $rs->close(); 00184 $stmt->close(); 00185 return $results; 00186 } 00187 00192 function &getOne() 00193 { 00194 $stmt =& $this->conn->createStatement(); 00195 if ($this->max) $stmt->setLimit($this->max); 00196 if ($this->start) $stmt->setOffset($this->start); 00197 $rs =& $stmt->executeQuery($this->sql); 00198 00199 if (Creole::isError($rs)) { 00200 return $rs; 00201 } 00202 00203 $e = $rs->next(); 00204 00205 if (Creole::isError($e)) { 00206 return $e; 00207 } 00208 00209 $res =& array_shift($rs->getRow()); 00210 $rs->close(); 00211 $stmt->close(); 00212 return $res; 00213 } 00214 00257 function &getAssoc($scalar = false) 00258 { 00259 $stmt =& $this->conn->createStatement(); 00260 if ($this->max) $stmt->setLimit($this->max); 00261 if ($this->start) $stmt->setOffset($this->start); 00262 $rs =& $stmt->executeQuery($this->sql); 00263 $e = null; 00264 00265 if (Creole::isError($rs)) { 00266 return $rs; 00267 } 00268 00269 $numcols = null; 00270 $results = array(); 00271 00272 while(($e = $rs->next()) === true) { 00273 $fields =& $rs->getRow(); 00274 if ($numcols === null) { 00275 $numcols = count($fields); 00276 } 00277 if (!$scalar || ($numcols > 2)) { 00278 $results[ array_shift($fields) ] = array_values($fields); 00279 } else { 00280 $results[ array_shift($fields) ] = array_shift($fields); 00281 } 00282 } 00283 00284 if (Creole::isError($e)) { 00285 return $e; 00286 } 00287 00288 $rs->close(); 00289 $stmt->close(); 00290 00291 return $results; 00292 } 00293 00313 function &getDataSet() 00314 { 00315 include_once 'jargon/QueryDataSet.php'; 00316 $qds =& new QueryDataSet($this->conn, $this->sql); 00317 $e =& $qds->fetchRecords($this->start, $this->max); 00318 00319 if (Creole::isError($e)) { 00320 return $e; 00321 } 00322 00323 return $qds; 00324 } 00325 } 00326

This file is part of the Creole[php4] library.


Copyright © 2004 Hans Lellelid  
Creole[php4] CVS