> 呵呵,因为昨天小邪没法用电脑,结果没有一日一博,所以今天要发两篇补上去才行呢。
> 简单讲一下如何操作 Mysql 数据库,看完的童鞋应该至少有写一个留言本的能力了。

> 当然咯,这里还没有讲如何过滤非法的字符,所以写保存文本的程序可别忘记了呢。
> P.s. 小邪这里应该也快下雪了呢,杭州都已经下了,这里离杭州三小时路程,好期待呢。
1. 首先建立一个连接信息配置文件:
> 嘿嘿,这个就是传说中的 Config.php 了,把 Mysql 服务器信息,用户名密码。
> 以及要操作的数据库名称填上去就好咯,因为小邪在这里只打算操作一个表。
> 所以把表的名称也填在这里了,下面代码的 $db_tab 就代表表名咯。
1 2 3 4 5 6 7 8 | <?php $db_url = 'localhost'; //url $db_user = 'root'; //username $db_psw = '753951'; //password $db_base = 'data'; //database $db_tab = 'user'; //table ?> |
2. 引用 PHP 文件:
> 引用的意思就是在这里调用 Config.php 里面的配置信息。
1 2 3 | <?php include ('config.php'); ?> |
> Include() 函数 -
> 此函数可获得指定文件中的所有文本,并把文本拷贝到使用 include 函数的文件中。
> Require() 函数 -
> 此函数与 include() 相同,不同的是它对错误的处理方式。
> 两者的区别 -
> Include() 函数会生成一个警告(但是脚本会继续执行)。
> 而 Require() 函数会生成一个致命错误(Fatal error)。
> 即在错误发生后脚本会停止执行。
3. 如何连接与断开:
> 建议是如果某个 PHP 文件操作数据库比较频繁,那么就在文件尾部断开。
> 如果只是在文件某个部分需要的话,请在部分结束的时候及时断开,保持性能。
1 2 3 4 5 6 | <?php include ('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); if (!$db) { die('Could not connect: ' . mysql_error()); } mysql_close($db); ?> |
> 我们在一个变量 $db 中存放了在脚本中以备稍后使用的连接
> 下面的判断就是若连接不成功则提示错误,当然这个不是必要的,呵呵。
> Mysql_close 函数就是在脚本未执行完前提前与数据库断开连接。
> 其实只要 PHP 脚本的运行一结束,就会关闭连接。
> 所以如果打算结束以后再关闭的话,就不需要写上此函数了。
4. 如何建立一个数据库:
> 这个命令一般来说在虚拟主机上是无法使用的。
> 因为在虚拟主机上的账号并不提供建立数据库的权限。
> 所以在本地测试或者VPS之类的,才可以用喔。
> 下面的代码执行后就会建立一个叫 data 的数据库,并提示成功或失败。
1 2 3 4 5 6 7 8 9 10 | <?php include ('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); if (mysql_query("CREATE DATABASE test",$db)) { echo "Database created"; } else { echo "Error creating database: " . mysql_error(); } ?> |
5. 字段的可用类型:

6. 如何建立一个表:
> ^_^,这里则是建立一个表以及两个字段的过程。
> 下面代码先连接了数据库,然后建立在 $db_base 数据库中建立 $db_tab 表。
> 之后建立两个字段,可以理解为表格的俩列,字段 Username 为 Text 类型。
> 字段 ID 为自动填充,即 Insert 一行数据之后,字段 ID 会自动加上一。
> 注意!!如果删除中间的某项数据,后面的 ID 是不会自动修改的。
1 2 3 4 5 6 7 8 9 | <?php include('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); $sql = "CREATE TABLE `".$db_base."`.`".$db_tab."` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` TEXT NOT NULL ) ENGINE = MyISAM;"; mysql_query($sql,$db); ?> |
7. 如何插入一行数据:
> 使用下面的代码可以在 $db_base 数据库的 $db_tab 表中插入一行。
> 字段 ID 为 NULL (表示要 Mysql 自己自动增加),Username 为 $user 的数据。
1 2 3 4 5 6 7 8 9 | <?php include('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); $sql = " INSERT INTO `".$db_base."`.`".$db_tab."` (`id`, `username`) VALUES ('NULL', '".$user."'); "; mysql_query($sql,$db); ?> |
8. 如何读取数据:
> 下面的代码就是查找 ID 为 $id 的某行数据,找到之后赋值为 $sql。
> 然后通过 Mysql_fetch_array 函数转换为一个数组 $ary。
> 则数组中的 $ary['username'] 就是 ID 为 $id 的用户名。
1 2 3 4 5 6 7 | <?php include('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); $sql = mysql_query("SELECT * FROM `".$db_tab."` WHERE `id` = ".$id); $ary = mysql_fetch_array($sql); echo $ary['username']; ?> |
9. 很牛的 Print_r 函数:
> 嘿嘿,使用这个函数可以直接输出整个数组到屏幕上,很强的说。
> 像上面的 $ary 数组就可以用下面的代码来打印出来。
1 | print_r($ary); |

10. 如何获得一个表的行数:
> 唔,实际上目前小邪只看到过使用下面这个效率比较低的方法。
> 或者创建一个小表来专门统计其他表的数据数目 ╮(╯▽╰)╭。
1 2 3 4 5 6 7 8 | <?php include('config.php'); $db = mysql_connect($db_url,$db_user,$db_psw); $sql = "select id from ".$db_tab; $query = mysql_query($sql); $num = mysql_num_rows($query); echo $num; ?> |
11. 下面给出小邪的一个倒序输出一个表的两个字段的程序:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <?php $db_url = 'localhost'; //Url $db_user = 'root'; //Username $db_psw = '753951'; //Password $db_base = 'urls'; //Database $db_tab = 'data'; //Table //Line ( ID , url ) $db = mysql_connect($db_url,$db_user,$db_psw); mysql_select_db($db_base,$db); $file_pagelist = 20; $page_end = $file_pagelist; function count_read() { global $db_tab; $sql = "SELECT * FROM ".$db_tab; $query = mysql_query($sql); $num = mysql_num_rows($query); return $num; } $page_start = count_read(); $page_end = $page_start - $file_pagelist; function data_read($url_code) { global $db_tab; $sql = mysql_query("SELECT * FROM `".$db_tab."` WHERE `id` = ".$url_code); $ary = mysql_fetch_array($sql); if ($ary['url']<>'') { return $ary['url']; } else { return 'null'; } } $count = count_read(); $start = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://url=w3.org/1999/xhtml"><head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>小邪的打印机</title><style type="text/css"> a{color:#555;text-decoration:none;} #wrap{padding-top:10px;font-size:15px;width:850px;margin:0 auto;} li{list-style:none;height:22px;}</style></head><body> <div id="wrap"><div id="main"><div class="rcontent">'; echo $start; if (isset($_GET['page'])) { $pagenum = $_GET['page']; if ($pagenum > 1) { $page_start = $page_start - $file_pagelist*($pagenum-1) - 1; $page_end = $page_start - $file_pagelist; $pagenum_last = $pagenum - 1; $pagenum_next = $pagenum + 1; $last = '?page='.$pagenum_last; $next = '?page='.$pagenum_next; } else { $last = '#'; $next = '?page=2'; } } else { $last = '#'; $next = '?page=2'; } for ($i=$page_start;$i>=$page_end;$i--) { $content = data_read($i); $content_save = $content; if (strlen($content) >= 80) { $content = substr($content,0,80).' ...'; } $list = '<li><span class="li_count">[ '.$i.' ]</span> -> <span class="url"><a target="_blank" href="' .$content_save.'"> '.$content.'</a></span></p>'; if ($i >= 0) { echo $list; } else { $next = '#'; } } $end = '</div></div><div id="footer"><p class="info"> Copyright © 2009-2010 <a href="http://www.evlos.org/"> Evlos</a></p><p class="link">已储存 [[replace_count]] 条 - <a href="?page=1">[ 第一页 ]</a> <a href="?page= [replace_pages]">[ 最后一页 ]</a> - <a href="[replace_last] ">[ 上一页 ]</a> <a href="javascript:void(location.replace (location))">[ 刷新 ]</a> <a href="[replace_next]"> [ 下一页 ]</a></p></div></div></body></html>'; $pages = (Int)(count_read()/$file_pagelist) + 1; $end = str_replace('[replace_count]',count_read(),$end); $end = str_replace('[replace_last]',$last,$end); $end = str_replace('[replace_pages]',$pages,$end); $end = str_replace('[replace_next]',$next,$end); echo $end; ?> |
坐玩沙发再看
@Auston Jary , 呵呵,冬天到了,就应该陷在又大又软的沙发里 ~
告诉你,这个在google reader里加星了,很经典的一篇。基础的才是最重要的。之前玩过mssql。也稍微看了一丁点的sql查询语句。php越来越强大了哈
@Rusaer , 呵呵,谢谢给它加星,也不枉费我花了1.5小时去搞定它 ~
@邪 罗刹,
这阵子我正在花时间学CSS呐,我不做大哥好多年
@619 , 嘿嘿,我支持你哦,CSS可是网站的脸面呢 ~
( ⊙o⊙ )哇,原来曾经是大哥,久仰久仰 ~
对童鞋是有一定的帮助,但是要说写个留言本程序,简单还行,功能复杂的还需要有些技术。
@漠天 , 呵呵,我对来玩的童鞋都很有信心呢 ~
好多潜力超强的 ~
像楼上那个大湿人 嘿嘿 ~
不看了,PHP还没有去学习,在学C语言.
@国外网页设计教程 , 呵呵,C语言最强大了,可惜我小时候没选准,学了个Delphi。
菜鸟飘过,还需要多学习基础啊。。。。。。
@Nox , 呵呵,你太谦虚了,建议你换域名在.htaccess里做好301重定向喔 ~
数据库操作我不怎么会,要好好向小邪学习了
@bolo , 呵呵,咱们互相学习来着,看你最多数据库差点,其他都很不错喔 ~
@邪 罗刹,
呵呵,其实我只有CSS+DIV还能凑合用,PHP和JavaScript都不行
@bolo , 嘎嘎,咱们半斤八两,我是PHP初学者,CSS也是凑合用。
我差一点就看完了,虽然我不太懂
@真爱左右 , 呵呵,谢谢你的支持,慢慢学习就懂咯 ~
上次花了两天时间就学了个PHP怎么操作数据库就丢下PHP了
@fatkun , 嘎嘎,我原来一直让自己觉得文本数据库很强 ~
可惜还是自欺欺人 ~
无法处理并发性的问题已经无法忽视了 ~
讲的很详细
@土狼妹妹 , 呵呵,相信你的支持噢 ~
嗯,好样的!我也要去学下php了,为用wp做准备!
@记忆盒子 , 呵呵,打算转到WP了吗?不错不错,(*^__^*) 嘻嘻……
昨天又停电一天,大修,我终于可以上网了
@阿吴 , ╮(╯▽╰)╭,这年头离了网络不行,我总算每天30分钟上网争取来了 ~
平时也用手机稍稍上一下呢 ~
你竟挑干货写,也不嫌累!
那个ENGINE = MyISAM;是什么意思呢?
@九站,
说明php要用mysql的什么引擎来操作,mysql有很多的数据库引擎的
@九站 , 呵呵,就像 Jerry Chen 说的,指定 Mysql 的操作引擎 ~
你真的准备重写你的URL程序了?
@Jerry Chen , 呵呵,当然要听从你的意见咯,已经开始改写了 ~
@邪 罗刹,
你应该知道怎么导出数据库里面评论者的邮箱地址吧?
@Jerry Chen , 呵呵,知道的呢 ~ 我打算改完短网址程序,然后也导出来玩 ~
裸奔男也准备重操CSS了,小邪别想跑,以后我会每日一问的,哈哈
@619 , 呵呵,哥们我跑得了和尚,跑不了庙 ~ 来吧 ~ 老衲挺得住 ~
@邪 罗刹,
老衲要顶住,不要射啊。。
@Jerry Chen , Orz ~ 要和谐 ~ 要纯洁 ~ ╮(╯_╰)╭
默默得来支持一下。。。
@kaka , 呵呵,谢谢你喔 ~
看的云里雾里。。。
@万戈 , 汗 ~ 万戈兄挺住 ~ 呵呵 ~
技术白痴略过。
@娱乐博客 , 呵呵,新闻强人 ~ 欢迎来玩 ~
在学php,数据库操作比我想象的要简单方便很多:)
@羽中 , 呵呵,是滴,我学之前老觉得怕怕的说 ~
适合刚开始学PHP的
不过我学的话在sql语句不会那么麻烦.
$sql = "
INSERT INTO $db_base (id,username) VALUES ('NULL', '$user')";
@柳城 , 汗 ~ 我是Phpmyadmin生成的语句来着 ~
额,话说这里应该是,这样吧:
mysql_select_db($db_base,$db);
$sql = "
INSERT INTO $db_tab (id,username) VALUES ('NULL', '$user')";
呵呵,班门弄斧了,童鞋表介意哈 ~
@柳城 , Orz .. 上面说错了 是这样 ~
mysql_select_db($db_base,$db);
$sql = "
INSERT INTO ".$db_tab." (id,username) VALUES ('NULL', '".$user."')
";
@邪 罗刹,
呵呵.. 我的意思是不需要用点句(.) 来做连接嘛.
@柳城 , 嘎?嘎嘎?不需要?这样也许?我马上去试试,这个世界太灰暗了 ~ 啊 我受打击了 ~
图片加水印,防盗么???
@Nox , 最近貌似有爬虫在乱爬,我这俩天每天要消耗700MB流量 ~
所以不得不实行一些措施了 ~ ╮(╯_╰)╭
还是那么长的教程..
@漠岚 , 呵呵,小邪一开始写就灵感狂涌 ~ 开玩笑,嘎嘎,实际上这样貌似容易理解一些吧 ~
唉~对我找个新手来说!好难哦!
@星网 , 额,呵呵,咱们到时候讲一些简单的 ~
文章不要台长哦,否则人看的就头晕了~~~
@程控交换机 , 谢谢你的意见,我会注意的喔 ~
我一直对数据库恐惧
@江流 , 我前几天也是呢,不过放心喔,只要一学进去,马上就会觉得灰常好用的呢 ~
额,数据库没怎么学,只会一点点
@ShuaiGe.Me , 呵呵,你那一点点肯定有我文章那么多吧 ~ O(∩_∩)O ~
严重高估了。。。
@ShuaiGe.Me , 没事,咱是大预言师 ~ 哇卡卡卡 ~
哈哈,又学到了
@开心凡人 , 呵呵,真开心,这是对我的支持呢 ~
不错,用了1个半小时搞得这么好,支持一下。
联盟实现了基本功能,你有空去关注一下吧。
@菠萝 , 收到 ~