如何使用PHP操作Mysql数据库

> 呵呵,因为昨天小邪没法用电脑,结果没有一日一博,所以今天要发两篇补上去才行呢。
> 简单讲一下如何操作 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;
 
?>
Leave a comment

68 Comments.

  1. Auston Jary 坐沙发!#1

    坐玩沙发再看 :arrow:

  2. Rusaer 坐板凳!#2

    告诉你,这个在google reader里加星了,很经典的一篇。基础的才是最重要的。之前玩过mssql。也稍微看了一丁点的sql查询语句。php越来越强大了哈

  3. 漠天 躺地板!#3

    对童鞋是有一定的帮助,但是要说写个留言本程序,简单还行,功能复杂的还需要有些技术。

  4. 不看了,PHP还没有去学习,在学C语言.

  5. Nox 下水道!#5

    菜鸟飘过,还需要多学习基础啊。。。。。。 :cry:

  6. 数据库操作我不怎么会,要好好向小邪学习了

  7. 我差一点就看完了,虽然我不太懂 :rolleyes:

  8. 上次花了两天时间就学了个PHP怎么操作数据库就丢下PHP了 :exclaim:

    • @fatkun , 嘎嘎,我原来一直让自己觉得文本数据库很强 ~
      可惜还是自欺欺人 ~
      无法处理并发性的问题已经无法忽视了 ~

  9. 讲的很详细

  10. 嗯,好样的!我也要去学下php了,为用wp做准备!

  11. 昨天又停电一天,大修,我终于可以上网了

  12. 你竟挑干货写,也不嫌累!
    那个ENGINE = MyISAM;是什么意思呢?

  13. 你真的准备重写你的URL程序了?

  14. 裸奔男也准备重操CSS了,小邪别想跑,以后我会每日一问的,哈哈 :smile:

  15. 默默得来支持一下。。。 :cool:

  16. 看的云里雾里。。。

  17. 技术白痴略过。

  18. 在学php,数据库操作比我想象的要简单方便很多:)

  19. 适合刚开始学PHP的
    不过我学的话在sql语句不会那么麻烦. :razz:
    $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."')
      ";

    • @柳城 , 嘎?嘎嘎?不需要?这样也许?我马上去试试,这个世界太灰暗了 ~ 啊 我受打击了 ~

  20. 图片加水印,防盗么??? :cool:

    • @Nox , 最近貌似有爬虫在乱爬,我这俩天每天要消耗700MB流量 ~
      所以不得不实行一些措施了 ~ ╮(╯_╰)╭

  21. 还是那么长的教程.. :mrgreen:

  22. 唉~对我找个新手来说!好难哦!

  23. 文章不要台长哦,否则人看的就头晕了~~~

  24. 我一直对数据库恐惧

  25. 额,数据库没怎么学,只会一点点

  26. 严重高估了。。。

  27. 哈哈,又学到了

  28. 不错,用了1个半小时搞得这么好,支持一下。
    联盟实现了基本功能,你有空去关注一下吧。

Leave a Reply

:evil: :razz: :wink: :rolleyes: :redface: :cry: :biggrin: :lol: :idea: :mrgreen: :mad: :exclaim: more »

[ Ctrl + Enter ]