note 5940 deleted from ref.ibase by irc-html

From: Date: Mon, 21 Jan 2002 18:52:14 +0000
Subject: note 5940 deleted from ref.ibase by irc-html
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-25639@lists.php.net to get a copy of this message
<b>PHP class to support Interbase.</b><br> Not without bugs... but this is something :) <pre> &lt;? class CConnectionIBase { var $err_logon = &quot;Can't connect to database %s!&quot;; var $descriptor = 0; // database descriptor var $result; // result array var $countRow = 0; // number of records in result array var $countField = 0; // number of fields in result array // Constructor. Creates class. function CConnectionIBase() {} // Opens specified database. // Returns database descriptor. function open($database, $username = &quot;sysdba&quot;, $password = &quot;masterkey&quot;, $charset=&quot;WIN1251&quot;) { $this-&gt;close(); $this-&gt;descriptor = ibase_connect($database, $username, $password, $charset) or die(sprintf($err_logon, $database)); return $this-&gt;descriptor; } // Clears result array. For internal use. function freeQuery() { unset($this-&gt;result); $this-&gt;countRow = 0; $this-&gt;countField = 0; } // Closes current connection to database function close() { if ($this-&gt;descriptor) { $this-&gt;freeQuery(); ibase_close($this-&gt;descriptor); $this-&gt;descriptor = 0; } } // Executes SELECT statement and fills result array by dataset contents // Returns number of records placed to result array function query($code) { $this-&gt;freeQuery(); if ($this-&gt;descriptor) { if ($code &amp;&amp; ($statement = ibase_query($this-&gt;descriptor, $code))) { while ($row = ibase_fetch_row($statement)) { if (!$this-&gt;countRow) { $this-&gt;countField = count($row); for ($fno = 0; $fno &lt; count($row); $fno++) { $finfo = ibase_field_info($statement, $fno); $fnames[$fno] = $finfo[&quot;name&quot;]; $ftypes[$fno] = $finfo[&quot;type&quot;]; } unset($finfo); } for ($fno = 0; $fno &lt; count($row); $fno++) { if (!strcmp($ftypes[$fno], &quot;BLOB&quot;)) { if (($finfo = ibase_blob_info($row[$fno])) &amp;&amp; ($finfo[&quot;length&quot;] &gt; 0) &amp;&amp; ($blobid = ibase_blob_open($row[$fno]))) { $blob = ibase_blob_get($blobid, $finfo[&quot;length&quot;]); ibase_blob_close($blobid); } else $blob = &quot;&quot;; $frow[$fnames[$fno]] = $blob; } else { if (!is_string($row[$fno])) $frow[$fnames[$fno]] = $row[$fno]; else $frow[$fnames[$fno]] = trim($row[$fno]); } } unset($finfo); $this-&gt;result[$this-&gt;countRow++] = $frow; } ibase_free_result($statement); } } return $this-&gt;countRow; } // Executes INSERT, DELETE or UPDATE statements. Result array is empty. // Returns nonzero if all OK function execute($code) { $this-&gt;freeQuery(); if ($this-&gt;descriptor) { if ($code &amp;&amp; ($statement = ibase_query($this-&gt;descriptor, $code))) { ibase_free_result($statement); return 1; } } return 0; } // Returns content of specified cell of result array or null if $col or $row is wrong. // $col can to hold the field name or field index function getData($col, $row) { if ((0 &lt;= $row) &amp;&amp; ($row &lt; $this-&gt;countRow)) { if (is_integer($col) &amp;&amp; (0 &lt;= $col) &amp;&amp; ($col &lt; $this-&gt;countField)) { $row = $this-&gt;result[$row]; reset($row); for ($fno = 0; $fno &lt; $col; $fno++) next($row); return current($row); } else if (is_string($col)) return $this-&gt;result[$row][strtoupper($col)]; } else return null; } // Returns field name by field index or empty string if $col is wrong function getFieldName($col) { if (is_integer($col) &amp;&amp; (0 &lt;= $col) &amp;&amp; ($col &lt; $this-&gt;countField)) { $row = $this-&gt;result[0]; reset($row); for ($fno = 0; $fno &lt; $col; $fno++) next($row); list($key, $val) = each($row); return $key; } else return &quot;&quot;; } // Commits current transaction function commit() { ibase_commit(); } // Rollbacks current transaction function rollback() { ibase_rollback(); } } ?&gt; </pre> <b>Example</b><br> This example formats content of your dataset as HTML table. It's enough to replace the bolded strings by real values. <pre> &lt;? $db = new CConnectionIBase(); $db-&gt;open(&quot;<b>YOUR_DATABASE_NAME</b>&quot;, &quot;<b>InterBase_LOGIN</b>&quot;, &quot;<b>InterBase_PASSWORD</b>&quot;); if ($db-&gt;query(&quot;select * from <b>YOUR_TABLE</b>&quot;)) { echo &quot;&lt;table cellPadding=2 cellSpacing=2 border=1&gt;\n&quot;; // Field Names echo &quot;&lt;tr&gt;\n&quot;; for ($fno = 0; $fno &lt; $db-&gt;countField; $fno++) { echo &quot;&lt;th&gt;&quot;; echo $db-&gt;getFieldName($fno); echo &quot;&lt;/th&gt;\n&quot;; } echo &quot;&lt;/tr&gt;\n&quot;; // Records for ($rno = 0; $rno &lt; $db-&gt;countRow; $rno++) { echo &quot;&lt;tr&gt;\n&quot;; for ($fno = 0; $fno &lt; $db-&gt;countField; $fno++) { echo &quot;&lt;td&gt;&quot;; echo $db-&gt;getData($fno, $rno); echo &quot;&lt;/td&gt;\n&quot;; } echo &quot;&lt;/tr&gt;\n&quot;; } echo &quot;&lt;/table&gt;\n&quot;; } else echo &quot;Dataset is empty.&lt;br&gt;\n&quot;; $db-&gt;close(); ?&gt; </pre>

« previous php.notes (#25639) next »