PHP+Oracle(OCI)初步 |
本文标签:Oracle PHP 从Oracle(OCI)开始 ERROR - Could not connect to Oracle";exit; } /* 如果连接成功,$conn就是一个连接符 。否则,脚本将结束并且输出“Could not connect to Oracle”的错误信息 现在开始来分析并且创建你的SQL语句,由无限制的查询结果得到可以记数的记录 。 在这里的格式语句“Select count(*) from table_name”相当于count(),是个SQL函数将会在数据库里执行 。比由依靠PHP计算得到的返回结果要好 。 */ $sql = "Select count(*) from table_name"; $stmt = OCIParse($conn, $sql); if(!$stmt) { echo " ERROR - Could not parse SQL statement.";exit; } /* 如果你输入了一个错误的SQL语句或者出现了另一个错误,你将看到“无法分析SQL”的错误提示,$stmt现在就是一个定义语句 。 现在执行你的分析语句 */ OCIExecute($stmt); /* 语句现在已经被执行了,但是正如你所看到的,没有结果标志符从OCIExecute()返回,由OCIParse()返回的结果包含了所有Oracle所需要的信息 。 现在开始选择这个查询的结果,$total rows[0]将会包含一个数 。如果没有行被返回,则显示错误并退出脚本的运行 。 */ OCIFetchInto($stmt, &$total_rows); if ( !$total_rows[0] ) { echo " Error - no rows returned!";exit; } /* 这段代码是可选择的但将会使返回的结果更清楚,显示一个类似于“总共有15条记录,现在显示的是第4条到第15条结果 。”的注释 */ $begin =($offset+1); $end = ($begin+($limit-1)); if ($end > $total_rows[0]) { $end = $total_rows[0]; } echo "There are $total_rows[0] results. n"; echo "Now showing results $begin to $end. n"; /* 现在是言归正传的时候了,释放原先的语句标识然后建立SQL语句.分析并执行SQL语句, 写代码时需注意:不同于MYSQL,Oracle在SQL语句中不支持限制语句 。就本身而言,有很多方法选择特定的行,最好的方法是把选择的结果放在一个临时表里或者“缓冲“所有的结果 。这样的方法已经超出了这篇教程的范围了 。我们将使用一个更简单的方法,在下面将进一步的解释 。 */ OCIFreeStatement($stmt); $sql = "Select * from table_name"; $stmt = OCIParse($conn, $sql); if(!$stmt) { echo " ERROR - Could not parse SQL statement.";exit; } OCIExecute($stmt); /* 现在显示结果 。最简单的做法是在结果集合中使用这个循环 。HTML将用来显示最终的结果,但是这个范例非常的简单,所以我们一个也不会用 。 编写代码时注意:如上述规定的,在Oracle里是无法限制的,所以我们必须通过在全部的结果集取出我们想要的和终止我们已经有的结果来做这个循环 。 在这一小节里,我们将会有几种不同的方法,实际上应该有更好的方法来写这个代码 。但是我认为我的这种方法不太容易读懂,它确实运行有效 。 */ $i=0; $j=0; while( OCIFetchInto($stmt, &$result_array) ) { if ($i>=$offset) { if ($j <$limit) { for ($k=0; $k<=count($result_array); $k++) { echo $result_array[$k]." "; } echo " "; $j++; } } $i++; } echo " "; /* 结果将显示在当前的页面里,现在是给访问者一个使用NEXT/PREV点击到其他页面的时候了 */ // 计算结果所需的页面数, $pages = intval($total_rows[0]/$limit); // $pages 现在是除剩余的部分外总共所需的页面数 if ($total_rows[0]%$limit) { // has remainder so add one page $pages++; } //在显示的是第一页时不显示PREV的连接 if ($offset!=0) { $prevoffset=$offset-$limit; echo "<< PREV n"; } // Now loop through the pages to create numbered links // ex. 1 2 3 4 5 NEXT >> for ($i=1;$i<=$pages;$i++) { // Check if on current page if (($offset/$limit) == ($i-1)) { // $i is equal to current page, so don display a link echo "$i "; } else { // $i is NOT the current page, so display a link to page $i $newoffset=$limit*($i-1); echo "$i n"; } } //检查当前页面是否为最后一页 if (!((($offset/$limit)+1)==$pages) && $pages!=1) { // Not on the last page yet, so display a NEXT Link $newoffset=$offset+$limit; echo "NEXT >> n"; |