社会专题
靓丽女人 黑白社会 硬件网络 天下军事 教育咨询 星新一代 汽车电子 幽默笑话 农村特色 有书有道 软件技术 玄幻奇幻 办公达人 便民服务 免费资源 代码效果 美文园地 寻医问药 健康保健 时尚酷玩 天文地理 科技科幻 美食天下 游山玩水 历史天空 制作教程
FLASH频道
女生游戏 益智游戏 有声艺术 有声故事 电脑运用 休闲游戏 MTV类 运动游戏
聚划算
商旅游玩 装潢装饰 家电家具 服装服饰 健康保健 二手特色 生活必备 数码产品
映讯频道
喜剧片 国内片 情感片 动作片 战争片 纪录之窗 欧美剧集 明星云集 动漫片 港澳台剧 大陆剧 科幻片 恐怖片 浓缩电影 教育教学 艺术无界 一技之长 邻国热剧
下载中心
音体美合 信息社政 英语外语 科学自然 常用软件 语文数学 手机软件 红绿软件
图片中心
制作美图 生活图片 美女欣赏 实物图片 艺术欣赏 风景欣赏
领券购
热销女装 热血男装 生活必须 电子电器 手机电脑 旅游出行 学习艺术 吃货优选
新闻中心
一语惊人 奇闻趣事 热点专栏 曝光台 消费警示 今日观察 IT业界 消费主张 动态备忘 专利之窗
关闭
当前位置:首页社会专题硬件网络
织梦dede数据库修改

讲解下织梦的sql数据库类,这篇文章讲解了数据库类的一些常见的使用方法,不过没有结合例子去介绍,很多人估计看了还不是很懂,为了让更多人理解织梦的数据库使用类,并能够运用到开发中。

接下来我们来做一个简单的查询操作,接着上面的代码我们继续写

test.php

以下是引用片段:

<?php require_once (dirname(__FILE__) . "/include/common.inc.php"); if($dsql->IsTable('dede_test')){ //如果存在dede_test表

//-------------------

//| 查询一条记录 |

//| GetOne() |

//-------------------

// ↓

$row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");

print_r($row);

}

?>

这里我们用了$dsql类的2个方法,IsTable()以及 GetOne(),IsTable先来判断这个表是否存在,如果存在我们就继续执行,他返回的是一个bool值,如果存在为true否则就为false.

接下来判断如果有这个表存在,则我们就执行查询单条记录的这个过程,即GetOne,通过帮 助文档可以知道:$arr = $db->GetOne($sql);也就是说查询的sql语句会传送回来一个数组。我们运行test.php看下运行结果:

Array

(

[id] => 3

[name] => 第三个喽

)

这个说明我们查询dede_test这个表id为3的数据成功了,返回了一个$row数组, 其中就存放了字段的值。

当然我们可以用echo $row[‘name’];或者$row[‘id’]来输出我们查询出来的结果

Tip:其实我们可以深入的研究下dedesql.class.php这个类,258行就有 这个方法:

以下是引用片段:

//执行一个SQL语句,返回前一条记录或仅返回一条记录

function GetOne($sql='',$acctype=MYSQL_ASSOC)

{

global $dsql;

if($dsql->isClose)

{

$this->Open(false);

$dsql->isClose = false;

}

if(!empty($sql))

{

if(!eregi("limit",$sql)) $this->SetQuery(eregi_replace("[,;]$",'',trim($sql) )." limit 0,1;");//这里用正则看看limit是否存在,如果不存在的话就自动加上limit 0,1这个内容,关于limit的介绍可以去看看SQL关于这个的介绍

else $this->SetQuery($sql);

}

$this->Execute("one");

$arr = $this->GetArray("one",$acctype);

if(!is_array($arr))

{

return '';

}

else

{

@mysql_free_result($this->result["one"]); return($arr);//清空资源,返回这个数组

}

}

3.深入查询,继续研究SELECT

刚才讲了查询一条记录,其实这个查询一条记录可以理解为我们内容页查询一篇文章,只是获取单条记录并将内容显示出来,但往往我们经常遇到的是查询列 表,及{dede:arclist/}或者{dede:list/},查询列表的话涉及到查询多条记录。

继续修改代码:

test.php

以下是引用片段:

<?php

require_once (dirname(__FILE__) . "/include/common.inc.php");

if($dsql->IsTable('dede_test')){

//如果存在dede_test表

//-------------------

//| 查询一条记录 |

//| GetOne() |

//-------------------

// ↓

$row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");

echo "查询id=3的记录:<br />显示结果:";

print_r($row);

//-------------------

//| 查询多条记录 |

//| Execute() |

//-------------------

// ↓

echo "<hr />查询dede_test表中的所有记录:<br />显示结果:<br />";

$sql = "SELECT * FROM dede_test";

$dsql->Execute('me',$sql);

while($arr = $dsql->GetArray('me'))

{

echo "id = {$arr['id']} ,name = {$arr['name']}<br />";

}

}

?>

我们运行test.php看到显示以下的内容:

查询dede_test表中的所有记录:

显示结果:

id = 1 ,name = 测试名字1

id = 2 ,name = 这是第二个

id = 3 ,name = 第三个喽

id = 4 ,name = 第四个

这个说明我们已经成功将表dede_test中的数据输出,当然主要是执行了那个“SELECT * FROM dede_test”,这是一个最简单的sql查询语句,当然也能够用到order by这些排序或者条件去查询,详细可以参考sql相关内容。

同时这里需要说明的是这里除了用$dsql->GetArray(‘me’)来获取内容到数组,还可以用$dsql->GetObject(“me”)获取内容到对象,不过调用方法有些不同:

主要这里通过$dbobj->fieldname来调用查询出来的数据

while($dbobj = $dsql->GetObject('me'))

{

echo "id = {$dbobj->id} ,name = {$dbobj->name}<br />";

}

tips:这里查询完了其实还可以用$dsql->GetTotalRow(“me”)来获取下查询出来的总数。

4.插入删除,也要用到SQL

上面我们介绍了如何用dsql来查询数据,主要有获取单条记录和获取多条记录2种,接下来我们来了解下使用dsql其他特性来为我们的 test.php加入添加内容和删除内容的功能。

先来了解下插入数据库的操作,我们先做一个表单,这个表单用于提交数据name的。表单代码如下:

<hr />

用于提交数据的表单:<br />

<form action="test.php" type="post">

<input type="hidden" name="dopost" value="save">

名称:<input type="text" name="name" value="">

<input name="提交" type="submit" value="提交">

</form>

这里我们用了一个隐藏域dopost来存放操作方法,输入框name用来存放输入数据,然后 传递给当前页面,再进行处理,这时候我们需要在test.php中加入部分的表单处理操作:

以下是引用片段:

//------------------- //| 表单处理过程 |

//| Save() |

//-------------------

// ↓

empty($dopost)? "" : $dopost;

if($dopost == "save"){

//如果执行插入操作

$sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";

$dsql->ExecuteNoneQuery($sql); //执行这个插入语句

$lastInsertID = $dsql->GetLastID(); //获取插入后的最后的ID,然后再传给下一个页面

ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");

exit();

这里主要是一个INSERT INTO 语句,然后通过$dsql的ExecuteNoneQuery方法来执行这个操作,并且获取插入数据最后一个id再将其传递给下一个页面以便高亮显示。

我们可以在编辑框中插入一条数据来测试下,看看插入数据后的返回结果。 

其实删除的操作也是如此,我们只需要稍微做个修改就可以了,增加一个dopost操作为 del的判断,然后在显示数据后面增加一个超链接,将id以get方式进行传递。并最后进行处理。

下面是我们修改循环查询输出的部分内容,有如下修改: 

以下是引用片段:

while($dbobj = $dsql->GetObject('me')) { if($id==$dbobj->id){ //如果传递的id值和查询值相同,则高亮显示最后一条插入记录

echo "<font color='red'>id = {$dbobj->id} ,name = {$dbobj->name}</font> <a href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a> <br />";//这里增加了一个删除的超链接

}else{

echo "id = {$dbobj->id} ,name = {$dbobj->name} <a href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a>< br />";

}

}

下面是del这个post的判断:

以下是引用片段:

empty($dopost)? "" : $dopost; if($dopost == "save"){ //如果执行插入操作

$sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";

$dsql->ExecuteNoneQuery($sql);

$lastInsertID = $dsql->GetLastID();

ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");

exit();

}elseif($dopost == "del"){

//如果dopost为del,则删除数据

$id = isset($id) && is_numeric($id) ? $id : 0;

$sql = "DELETE FROM `dede_test` WHERE (`id`='21286')";

$dsql->ExecuteNoneQuery($sql);

ShowMsg("成功删除一条记录内容!","test.php");

exit();

}

tips:这里用到了一个ShowMsg()函数,这个是用来返回一个对话框的,详细可以查 看下\include\common.func.php的372行相关函数的代码。

提示:输入修改代码都可运行!
0
酒精度
65
顶一下
相关阅读
内容加载中……