金色的骷髅 发表于 2015-2-4 00:04:38

PHP教程之封装了ORACLE函数的数据库操作类

培训的第三阶段,开始接触MYSQL,设计数据库,学习PHP如何去连接MYSQL数据库。对于MYSQL,我并不陌生,因为学校开设了Linux系统的课程,对于数据库的操作。   

<?php // -*- C++ -*-
/*
* $Id: db-oci8.phl,v 1.2 1998/10/01 19:16:06 ssb Exp $
*/
$db_error_code = 0;
$db_error_msg = false;
$db_error_source = false;
/*
* Database specific notes:
*
* - You must configure Oracle listener to use this abstraction layer.
*
*/

/**
* @function db_connect
* @purpose Connect to a database
* @desc
* Connects to a database and returns and identifier for the connection.
* @arg database
* Data source name or database host to connect to.
* @arg user
* Name of user to connect as.
* @arg password
* The user's password.
*/
function db_connect($database, $user, $password)
{
$ret = @OCILogon($user, $password, $database);
db_check_errors($php_errormsg);
return $ret;
}
/*
* Function: db_query
* Arguments: $conn (int) - connection identifier
* $query (string) - SQL statement to execute
* Description: executes an SQL statement
* Returns: false - query failed
* integer - query succeeded, value is result handle
*/
function db_query($conn, $query)
{
$stmt = @OCIParse($conn, $query);
db_check_errors($php_errormsg);
if (!$stmt) {
return false;
}
if (@OCIExecute($stmt)) {
return $stmt;
}
db_check_errors($php_errormsg);
@OCIFreeStatement($stmt);
return false;
}
/*
* Function: db_fetch_row
* Arguments: $stmt (int) - result identifier
* Description: Returns an array containing data from a fetched row.
* Returns: false - error
* (array) - returned row, first column at index 0
*/
function db_fetch_row($stmt)
{
$cols = @OCIFetchInto($stmt, &$row);
if (!$cols) {
db_check_errors($php_errormsg);
return false;
}
return $row;
}
/*
* Function: db_free_result
* Arguments: $stmt (int) - result identifier
* Description: Frees all memory associated with a result identifier.
* Returns: false - failure
* true - success
*/
function db_free_result($stmt)
{
global $db_oci8_pieces;
if (isset($db_oci8_pieces[$stmt])) {
unset($db_oci8_pieces[$stmt]);
}
$ret = @OCIFreeStatement($stmt);
db_check_errors($php_errormsg);
return $ret;
}
/*
* Function: db_disconnect
* Arguments: $connection (int) - connection identifier
* Description: closes a database connection
* Returns: false - failure
* true - success
*/
function db_disconnect($connection)
{
$ret = @OCILogoff($connection);
db_check_errors($php_errormsg);
return $ret;
}
/*
* Function: db_autocommit
* Arguments: $connection (int) - connection identifier
* Description: turn autocommit on or off
* Returns: false - failure
* true - success
*/
function db_autocommit($connection, $enabled)
{
if (!$enabled) {
db_post_error(0, "Transactions not yet implemented");
return false;
}
return true;
}

function db_commit($connection)
{
return true;
}

function db_rollback($connection)
{
db_post_error(0, "Transactions not yet implemented");
return false;
}

function db_quote_string($string)
{
$ret = ereg_replace( "'", "''", $string);
return $ret;
}

function db_prepare($connection, $query)
{
global $db_oci8_pieces;
$pieces = explode( "?", $query);
$new_query = "";
$last_piece = sizeof($pieces) - 1;
print "<br>last_piece=$last_piece\n";
while (list($i, $piece) = each($pieces)) {
$new_query .= $piece;
if ($i < $last_piece) {
$new_query .= ":var$i";
}
}
print "<br>new_query=$new_query\n";
$stmt = @OCIParse($connection, $new_query);
if (!$stmt) {
db_check_errors($php_errormsg);
return false;
}
for ($i = 0; $i < $last_piece; $i++) {
$bindvar = ":var$i";
print "<br>trying to bind $bindvar\n";
if (!@OCIBindByName($stmt, $bindvar, &$db_oci8_pieces[$stmt][$i])) {
db_check_errors($php_errormsg);
@OCIFreeStatement($stmt);
return false;
}
}
return $stmt;
}

function db_execute($stmt, $data)
{
global $db_oci8_pieces;
while (list($i, $value) = each($data)) {
$db_oci8_pieces[$stmt][$i] = $data[$i];
}
$ret = @OCIExecute($stmt);
if (!$ret) {
db_check_errors($php_errormsg);
return false;
}
return true;
}

function db_error_code()
{
global $db_error_code;
return $db_error_code;
}

function db_error_msg()
{
global $db_error_msg;
return $db_error_msg;
}

function db_error_source()
{
global $db_error_source;
return $db_error_source;
}

function db_check_errors($errormsg)
{
global $db_error_code, $db_error_msg, $db_error_source;
if (ereg( '^([^:]*): (...-.....): (.*)', $errormsg, &$data)) {
list($foo, $function, $db_error_code, $db_error_msg) = $data;
$db_error_msg = "$function: $db_error_msg";
$db_error_source = "";
} elseif (ereg( '^([^:]*): (.*)', $errormsg, &$data)) {
list($foo, $function, $db_error_msg) = $data;
$db_error_msg = "$function: $db_error_msg";
$db_error_code = 0;
$db_error_source = "";
} else {
$db_error_msg = $errormsg;
$db_error_code = 0;
$db_error_source = "";
}
}

function db_post_error($code, $message)
{
global $db_error_code, $db_error_msg, $db_error_source;
$db_error_code = $code;
$db_error_msg = $message;
$db_error_source = "";
}

function db_api_version()
{
return 10; // 1.0
}
?>

通过这段时间的学习实践,对软件开发有了更多新的认识,不在局限于之前的片面性。当然,现在所学到的东西其实并不多,离当一个真正的程序员,还有很大的差距。

变相怪杰 发表于 2015-2-4 08:31:10

有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。

admin 发表于 2015-2-9 20:11:43

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

莫相离 发表于 2015-2-13 18:52:51

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

简单生活 发表于 2015-2-23 09:24:36

本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。

只想知道 发表于 2015-3-7 06:29:19

写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。

老尸 发表于 2015-3-7 10:43:40

说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。

山那边是海 发表于 2015-3-10 18:59:05

本文当是我的笔记啦,遇到的问题随时填充

活着的死人 发表于 2015-3-17 09:08:21

写的比较杂,因为我也是个新手,不当至于大家多多指正。

不帅 发表于 2015-3-22 03:09:13

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

第二个灵魂 发表于 2015-3-31 17:57:12

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

灵魂腐蚀 发表于 2015-4-1 07:09:37

学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。

再见西城 发表于 2015-4-1 11:10:01

个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。

谁可相欹 发表于 2015-4-11 20:22:37

基础有没有对学习php没有太大区别,关键是兴趣。

愤怒的大鸟 发表于 2015-4-22 22:27:16

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

小魔女 发表于 2015-6-11 17:21:54

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

飘飘悠悠 发表于 2015-6-27 21:42:31

首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。

若相依 发表于 2015-7-1 18:05:18

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

因胸联盟 发表于 2015-7-17 11:05:06

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
页: [1]
查看完整版本: PHP教程之封装了ORACLE函数的数据库操作类