写了一个简单的php语言的mysql框架

实现了object 到数据库表的简单映射。我暂且称这个框架为whoistester mysql framework for php.
本框架只有一个php class, 在php5 中试验没有问题。
本框架,要求数据库的里的每个表必须有Id这个字段,否则会有问题。 当然读者也可以尝试修改源代码, 以适应表没有Id字段的情况。

这个class 有四个成员变量, 7个成员函数。

private static $databaseName = “device”; 数据库名称
private static $dbUser = “root”; 访问数据库的用户名
private static $dbUserPassword = “password”; 访问数据库的密码
private static $databaseServerName = “192.168.1.111”; 访问数据库的

7个函数分别为:
public static function save($Object,$whereName)

第一个参数是 class实例, 第二个参数是 条件 (即 where column = whereName) , 第二个参数如果为空,则默认以Object 中的 ID值作为save的条件。 如果ID为空则save返回失败。 save的表名, 会从Object实例获取object 的class 名称, 这个class名称必须是与表名一致。

public static function Select($tableName,$columnList,$orderby,$limit)
第一个参数为表名, 第二个参数为select的字段列表,必须为array类型,如果只有一个字段,则为字符串。
第三个参数为, 按哪个字段进行排序,默认为空时,是按Id字段。 第四个参数是limit参数, 可以写作 5,10 ,表示从5个到10个record纪录。 该函数返回的是一个数组嵌套。 如 arraya = {[1] = {Id,data} , [2] = {Id,data}}

public static function delete($Object,$whereName)
删除记录函数, 传入删除的Object , 和条件。 如果条件为空,则按传入Object的ID作为条件依据进行删除。

public static function insert($Object)
插入记录
function testDb() 调试使用,没有用途。
public static function _connectDb() 供其它函数进行使用
public static function _disconnectDb($_db_con) 供其它函数进行实用。

如何使用该框架?

第一步: 写你的php脚本时,include 这个php框架文件,和与数据库表有映射关系的php class文件。

例如: 我们数据库中有一个user 表。
分别有Id, UserName,Password,GroupId 四个字段。
那么我们的数据库表的这个class我们这么写。
class User
{
var $Id;
var $UserName;
var $Password;
var $GroupId;
}

在另外一个测试液面中. test.php 这么完成。

<?php

Id=3; 对对象进行负值, 其实就是初始化。
$order_new->UserName=”root”;
$order_new->Password=”what”;
$order_new->GroupId=1;
初始化完毕
DbAction::insert($order_new);
那么我们就插入这个对象。
DbAction::save($order_new,”Id”);
也可以进行save操作。
$result_data = DbAction::Select($order_new,array(“Id”,”UserName”,”GroupId”),””,””);
然后我们select以下,看一下可以看到插入进去的记录。
echo “
the first id is: “.$result_data[“1”][“Id”];
DbAction::delete($order_new,”Id”);
最后我们删除这条记录。
?>

附上whoistester mysql framework for php 源代码:

<?php

class DbAction {

private static $databaseName = “device”;
private static $dbUser = “root”;
private static $dbUserPassword = “password”;
private static $databaseServerName = “192.168.1.111”;
public static function save($Object,$whereName)
{
//Argu1: $Object is the object which we want update in the persistent data.
//Argu2: $whereName is the condition when update the object (in sql it’s “where wherename=value”). If the whereName equal “”, default the whereName will be the Id.
//If the condition does not specified the unique rcord, will update all the record all matched the condition. //Return: true or false
//step1: get the class name (now didn’t support bunch update )
//step2: get the class all properties and values
//setp3: create the update sql and update
if(strcmp(get_class($Object),””) == 0)
{ return false; }
if($whereName == “”) $whereName = “Id”;
$whereValue = -255;
$class_vars = get_class_vars(get_class($Object));
$queryString = “update “.get_class($Object).” set “;
foreach($class_vars as $name =>$value)
{
if($name == $whereName)
$whereValue = $Object->$name;
else
{
if($Object->$name != “” && $name != “Id”)
$queryString = $queryString.$name.”='”.$Object->$name.”‘ ,”;
}
}
if( ($whereName == “Id” && $whereValue == “”) || $whereValue == -255) return false;
$queryString = trim($queryString,”,”).” where “.$whereName.”='”.$whereValue.”‘”;
echo $queryString;

$dbConnection = self::_connectDb();
$result = mysql_query($queryString);
self::_disconnectDb($dbConnection);
echo mysql_error();

return $result;
}

public static function Select($tableName,$columnList,$orderby,$limit)
{

// return error or “” or ArrayList (if no result selected will return “” , if error occured will return false )
//if(strcmp(get_class($Object),””) == 0)
//{
// return false;
//}

$queryString = “SELECT “;
if($columnList != “”)
{
if(is_array($columnList))
{
foreach($columnList as $column)
{
$queryString .= $column.”,”;
}
}
else
{
$queryString .= $columnList;
}
}
else $queryString .=”*”;
$queryString = trim($queryString,”,”).” FROM “.$tableName;
if($orderby != “”) $queryString .= ” order by “.$orderby;
if($limit != “”) $queryString .= ” limit “.$limit;
$dbConnection = self::_connectDb();
echo $queryString;
$result =mysql_query($queryString);
$resultData = “”;
if($result){
$i = 1;
while($row = mysql_fetch_array($result))
{
$resultData[$i] = $row;
$i ++;
}
}
self::_disconnectDb($dbConnection);
return $resultData;
}

public static function delete($Object,$whereName)
{

if(strcmp(get_class($Object),””) == 0)
{
return false;
}

if($whereName == “”) $whereName = “Id”;
$whereValue = -255;
$class_vars = get_class_vars(get_class($Object));
$queryString = “delete from “.get_class($Object);
foreach($class_vars as $name => $value)
{
if($name == $whereName)
{
$whereValue = $Object->$name;
break;
}
}
if( ($whereName == “Id” && $whereValue == “”) || $whereValue == -255) return false;
$queryString .= ” where “.$whereName.”='”.$whereValue.”‘”;
echo $queryString;
$dbConnection = self::_connectDb();
$result = mysql_query($queryString);
self::_disconnectDb($dbConnection);
return $result;
}

public static function insert($Object)
{
$class_vars = “”;
$queryString = “”;
$insertValues = “”;

if(is_array($Object))
{
//Class object array , could bunch insert data
}
else{
if(strcmp(get_class($Object),””) == 0)
{
return false;
}
$class_vars = get_class_vars(get_class($Object));
$queryString = “insert into “.get_class($Object).” (“;
}

foreach($class_vars as $name => $value)
{
if($name != “Id”)
{
$queryString .= $name.”,”;
$insertValues .= “‘”.$Object->$name.”‘,”;
}
}
$queryString = trim($queryString,”,”).”) values (“.trim($insertValues,”,”).”)”;
echo $queryString.”
“;
$dbConnection = self::_connectDb();
$result = mysql_query($queryString);
self::_disconnectDb($dbConnection);
return $result;
}

function testDb()
{
//print “hello”;
//$result = mysql_query(“SELECT * FROM MyOrders”);
//while($row = mysql_fetch_array($result))
//{
// print $row[“Type”];
//}
$order_new = new User();
$order_new->Id=1;
//$order_new->UserName=””;
$order_new->Password=”passwd”;
$order_new->GroupId=1;
if($this->save($order_new,””))
echo “saved ok!”;
else
echo “error!”;

//$testclass = 5;
//echo “class name is : “.get_class($testclass);

//if(strcmp(get_class($testclass),””) == 0)
//{
// echo “not a class”;
//}

}

public static function _connectDb()
{
$_db_con = mysql_connect(self::$databaseServerName,self::$dbUser,self::$dbUserPassword);

if (!$_db_con)
die(‘Could not connect: ‘ . mysql_error());
else
mysql_select_db(self::$databaseName , $_db_con);
return $_db_con;
}

public static function _disconnectDb($_db_con)
{
mysql_close($_db_con);
}

}

//$db = new DbAction();
//$db->testDb();

?>

此篇文章已被阅读5413 次

Add a Comment

邮箱地址不会被公开。 必填项已用*标注