Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3534680
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: Mysql/postgreSQL

2009-10-28 16:10:14

14 使用MySQL数据库

PHP中与MySQL相关的常用函数

1、int mysql_affected_rows ( [resource $link_identifier] ),
取得前一次 MySQL 操作所影响的记录行数,返回最近一次与 link_identifier 关联的 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。

2、关闭MySQL连接:bool mysql_close ( [resource $link_identifier] )
关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接。

3、打开一个到MySQL服务器的连接:resource mysql_connect ( [string $server [, string $username [, string $password [, bool $new_link [, int $client_flags]]]]] ),
打开或重复使用一个到 MySQL 服务器的连接。server:MySQL 服务器。username:用户名。password:密码。默认值是空密码。new_link: ,client_flags:参数。

4、新建一个MySQL数据库
bool mysql_create_db ( string $database name [, resource $link_identifier] )
尝试在指定的连接标识所关联的服务器上建立一个新数据库。 database_name:要创建的数据库名。 link_identifier:MySQL 的连接标识符。

5、移动内部结果的指针:bool mysql_data_seek ( resource $result, int $row_number )
将指定的结果标识所关联的 MySQL 结果内部的行指针移动到指定的行号。result:返回类型为 resource 的结果集。该结果集从 mysql_query() 的调用中得到。row_number:想要设定的新的结果集指针的行数。

6、取得结果数据:string mysql_db_name ( resource $result, int $row [, mixed $field] )
取得 mysql_list_dbs() 调用所返回的数据库名。 result:mysql_list_dbs() 调用所返回的结果指针。 row:结果集中的行号。 field:字段名。

7、发送一条MySQL查询:resource mysql_db_query ( string $database, string $query [, resource $ link_identifier ] )
根据查询结果返回一个MySQL结果资源号,出错时返回FALSE。本函数会对 INSERT/UPDATE/DELETE 查询返回 TRUE/FALSE 来指示成功或失败。

8、丢弃(删除)一个MySQL数据库
bool mysql_drop_db ( string $database_name [, resource $ link_identifier ] )
尝试丢弃(删除)指定连接标识所关联的服务器上的一整个数据库。如果成功则返回 TRUE,失败则返回 FALSE。   
不提倡使用此函数。最好用mysql_query()提交一条 SQL DROP DATABASE 语句来替代。

9、int mysql_errno ( [resource $link_identifier] ),如果没有出错则返回 0(零)。

10、string mysql_error ( [resource $link_identifier] ),
返回上一个 MySQL 函数的错误文本,如果没有出错则返回 ''(空字符串)。

11、string mysql_escape_string ( string $unescaped_string ),
本函数将unescaped_string转义,使之可以安全用于mysql_query()。并不转义 % 和 _。

12、array mysql_fetch_array ( resource $result [, int $ result_type ] ),返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。 mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。

13、
……

对数据库操作

1、连接MySQL数据库:mysql_connect()

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
或者:$link=mysql_connect($db_host,$db_user,$db_pass)or die("不能连接到服务器".mysql_error());
?>

2、显示可用数据库:mysql_list_dbs()

<?php
$db_list=mysql_list_dbs($link);
while($db=mysql_fetch_object($db_list))
//通过循环遍历返回的结果集
{ echo $db->Database;
//显示数据库名,注意大小写
   echo "

";
}
?>

object mysql_fetch_object ( resource $result ),
返回根据所取得的行生成的对象,如果没有更多行则返回 FALSE。

3、在服务器上创建新的数据库:mysql_create_db()

<?php
mysql_create_db("database1",$link); 已废弃!
最好使用mysql_query()发送SQL语句创建:

$sql="CREATE DATABASE data2"; //创建数据库的SQL语句
mysql_query($sql,$link);
//发送SQL语句
?>


4、在选定数据库里创建表

<?php
mysql_select_db($db_name,$link);
//选择相应的数据库,这里选择test库
//下面的$sql就为创建表的SQL语句
$sql=
"create table test1(id int(5) not null auto_increment primary key,
       name varchar(12) not null,
       mail varchar(30) not null,
       phone varchar(14) not null,
       address varchar(30) not null)"
;
if(mysql_query($sql,$link))
//发送SQL语句执行创建表的操作
?>

注意:1)在一对圆括号里列出完整的字段清单。2)字段名间用逗号隔开,逗号后要加一个空格。3)最后一个字段名不用逗号。4)所有的SQL语句以分号“;”结束。
$table_list=mysql_list_tables($db_name,$link),显示库中所有的表,已废弃!
可以使用mysql_query()发送SQL语句“show tables”来显示所有表。
改为:$table_list=mysql_query(“show tables”,$link)。

5、删除已经存在的库和表
删除库有两种方法:一是通过mysql_drop_db()函数,另一种是通过mysql_query()发送SQL语句:drop database database_name。
删除表只能通过mysql_query()发送SQL语句:drop table table_name。

<?php
$sql="drop table test1";
//删除表的sql语句
mysql_query($sql,$link)
//执行SQL语句
$sql="drop database data2";
//删除数据库的sql语句
mysql_query($sql,$link)
//执行SQL语句
?>

对MySQL表进行操作

1、执行INSERT INTO语句插入记录
insert into table_name(field1,field2,…) values(values1,values2…)

";
echo"";//显示ID
echo "
"; //显示姓名
echo "
"; //显示邮箱
echo "
"; //显示电话
echo "
"; //显示地址
echo "
";
}
?>

<?php
//以下SQL语句为插入记录操作
$sql="insert into test1(name, mail, phone, address) values('张三', 'zhangsan@homail.com', '1234567', '某省某市某区某街')";
mysql_query($sql)
//执行SQL语句
$sql="select * from test1";
//先执行SQL语句显示所有记录
$result=mysql_query($sql,$link);
//使用mysql_query()发送SQL请求
while($row=mysql_fetch_array($result))
//遍历SQL语句执行结果把值赋给数组
{
echo "

".$row[id]." ".$row[name]." ".$row[mail]." ".$row[phone]." ".$row[address]."
array mysql_fetch_array (),返回根据从结果集取得的行生成的数组,如果没有更多行则返回 FALSE。

2、执行SELECT查询
浏览表中的所有记录:select * from tablename;

使用表单扩展添加记录

前台:

<script language="javascript">
function Juge(theForm)
{ if (theForm.name.value == "")
{ alert("请输入姓名!");
   theForm.name.focus();
   return (false);
}
<form action="14-12.php" method="post" onsubmit="return Juge(this)">
<tr><td>输入姓名:</td><td><input name="name" type="text"></td></tr>

后台处理:14-12.php

<?php
/*获取表单输入,并去掉HTML格式。表单采用post方式传递数据,用post来获取输入*/
$name=htmlspecialchars($_POST['name']);
//获取姓名
$mail=htmlspecialchars($_POST['mail']);
//获取邮箱
$phone=htmlspecialchars($_POST['phone']);
//获取电话
$address=htmlspecialchars($_POST['address']);
//获取地址
$myconn=mysql_connect("$db_host","$db_user","$db_pass");
//连接服务器
mysql_select_db("$db_name",$myconn);
//选择操作库
$strSql="insert into $table_name(name, mail, phone, address) values ('$name', '$mail', '$phone', '$address')";
//对表进行插入操作
mysql_query($strSql,$myconn) or die("插入时出错".mysql_error());
//发送SQL请求
?>


3、执行UPDATE语句更新记录
update table_name set field1=“value1”,field2=“value2” where where_definition
例:

<?php
$sql="update test1 set name='王五', mail='wangwu@tom.com', phone='3456789', address='上海市高新开发区' where name=‘张三’";
//创建更新记录SQL语句
mysql_query($sql,$link);
//发送SQL请求
?>

使用表单扩展更改记录功能
在echo "".$row[address]." "; 后加一句:
echo "修改";

14-15.php

<form action="14-16.php" method="post" onsubmit="return Juge(this)">
<?php
mysql_select_db(data2,$link);
//选择相应的数据库
$sql="select * from test1 where id=$_GET[id]";
//只显示请求ID号的内容
$result=mysql_query($sql);
$row=mysql_fetch_array($result);
//把结果赋值给数组
?>
<td>输入姓名:</td>
<td><input name="name" type="text" value=""></td>



14-16.php

<?php
$strSql="update $table_name set name='$name', mail='$mail', phone='$phone', address='$address' where id=$id";
//对表进行修改操作
mysql_query($strSql,$myconn) or die("插入时出错".mysql_error());
//发送SQL请求
?>

4、执行DELETE语句删除记录

<?php
delete from table_name where field1=“value1”
$sql="delete from test1 where id=1";
//创建更新记录SQL语句
mysql_query($sql,$link);
//发送SQL请求
?>

5、执行ALTER TABLE语句改变表的结构

<?php
alter table table_name add column field_name1 date, add column field_name2 time…;
$sql="alter table test1 add column mob_phone varchar(11),add column birthday varchar(8)";
mysql_query($sql);
//执行添加字段的SQL语句
$sql="alter table test1 drop mail";
mysql_query($sql);
//执行删除字段的SQL语句
mysql_list_fields(),返回指定表的所有字段。已过时,使用SQL语名:
$result=mysql_query("show columns from test1");
?>

对MySQL表的高级查询

1、使用WHERE子句:select * from test1 where ic<10
select * from test1 where name=‘张三’。可用操作符:“=”“<”“>”“not”等
使用LIKE模糊查询:select * from table_name where field_name like value
通配符“%”指代0个或多个、“_”指代任一个单个字符。
select * from table_name where address like “%北京%”,地址中包含北京的。

2、使用LIMIT子句对结果进行分页显示
select field_name from table_name limit 10,参数10为最大返回数目。
或 select field_name from table_name limit 2,3,第一个参数2指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量为0。
$sql="select * from test1 limit 3";

3、使用ORDER BY对查询结果进行排序
select field_name from table_name order by field_name desc
desc为降序,asc为升序,默认按照升序。
例:$sql="select * from test1 order by id desc";
多重排序:多次使用ORDER BY子句
select field_name from table_name order by field_name, order by field_name2
先对查询结果按field_name排序,如果多个记录的field_name字段相同,这时再按field_name2进行排序。


MySQL数据库实例:学生档案管理

15 用PHP实现人机交互

表单元素的组成:

1、TEXT(文本输入框)


2、PASSWORD(密码输入框)
基本同TEXT,输入以*号显示

3、BUTTON(普通按钮)


4、RADIO(单选按钮)

通常以一组出现,具有相同的NAME属性和不同的VALUE属性。checked为初始选中。

5、CHECKBOX(复选框)


6、SELECT(列表框)

SIZE为1时表现为下拉菜单,SIZE大于1时表现为列表框形式。

7、TEXTAREA(文本域)


8、SUBMIT(提交按钮)


9、RESET(重置按钮)


10、HIDDEN(隐藏域)

在普通WEB页中插入表单



前台与后台的纽带:ACTION=URL

POST与GET的区别
GET方式提交的表单,数据被附加到URL上作为URL的一部分发送到服务器,POST方式则是将表单中的信息作为一个数据块发送到服务器。
处理表单提交的数据
如果register_globals = On,用户提交的变量可以当作全局变量直接使用,如$username, $password。但这样存在安全隐患。后来默认为Off。
引用方法:$_POST[USERNAME]、$_POST[password]
    $_GET[USERNAME]、$_ GET[password]

在PHP的URL上加入参数:15-3.php?username=RBT&sex=男&age=22
用$_GET[username]、$_GET[sex]等处理。

pathinfo — 返回文件路径的信息

16 计数器程序

简单文本计数器

<?php
$c_file="counter.txt";
//文件名赋值给变量
if(!file_exists($c_file))
//如果文件不存在的操作
{
$myfile=fopen($c_file,"w");
//创建文件
fwrite($myfile,"0");
//置入“0”
fclose($myfile);
//关闭文件
}
$t_num=file($c_file);
//把文件内容读入变量
$t_num[0]++;
//文件内容自增1
echo "欢迎!您是本站第".$t_num[0]."位访客!";
//显示文件内容
$myfile=fopen($c_file,"w");
//打开文件
fwrite($myfile,$t_num[0]);
//写入新内容
fclose($myfile);
//关闭文件
?>

图形化计数器

<?php
$c_file="counter.txt";
//文件名赋值给变量
if(!file_exists($c_file))
//如果文件不存在的操作
{
$myfile=fopen($c_file,"w");
//创建文件
fwrite($myfile,"0");
//置入“0”
fclose($myfile);
//关闭文件
}
$t_num=file($c_file);
//把文件内容读入变量
$t_num[0]++;
//原始数据自增1
$myfile=fopen($c_file,"w");
//写入方式打开文件
fwrite($myfile,$t_num[0]);
//写入新数值
fclose($myfile);
//关闭文件
echo "欢迎!您是本站第";
//显示内容头部
$myfile=fopen($c_file,"r");
//以只读方式打开文件
while(!feof($myfile))
//循环读出文件内容
{
$num=fgetc($myfile);
//当前指针处字符赋值给变量
if($num!==FALSE)
//如果数值存在执行操作
{
   echo ".$num.".gif>";
//显示相应图片
}
}
fclose($myfile);
//关闭文件
echo "位访客!";
//显示内容尾部
?>



string fgetc ( resource $handle ),    返回一个包含有一个字符的字符串,该字符从 handle 指向的文件中得到。碰到 EOF 则返回 FALSE。
文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。
警告:本函数可能返回布尔值 FALSE,但也可能返回一个与 FALSE 等值的非布尔值,例如 0 或者 ""。请参阅布尔类型章节以获取更多信息。应使用 === 运算符来测试本函数的返回值。

加入“防恶意刷新功能”

<?php
$c_file="counter.txt";
//文件名赋值给变量
if(!file_exists($c_file))
//如果文件不存在的操作
{
$myfile=fopen($c_file,"w");
//创建文件
fwrite($myfile,"0");
//置入“0”
fclose($myfile);
//关闭文件
}
$t_num=file($c_file);
//把文件内容读入变量
if($_COOKIE["date"]!="date(Y年m月d日)")
//判断COOKIE内容与当前日期是否一致
{
$t_num[0]++;
//原始数据自增1
$myfile=fopen($c_file,"w");
//写入方式打开文件
fwrite($myfile,$t_num[0]);
//写入新数值
fclose($myfile);
//关闭文件
//重新将当前日期写入COOKIE并设定COOKIE的有效期为24小时
setcookie("date","date(Y年m月d日)",time()+60*60*24);
}
?>

 

多用户计数器

创建counter表

<?php
$myconn=mysql_connect("localhost","root","rbt0328");
//连接到服务器
mysql_select_db(data2,$myconn);
//连接到test库
$query="create table counter (id int(5) not null auto_increment primary key, username varchar(20) not null, count int(5) not null)";
//创建counter表语句
mysql_query($query);
//执行语句
mysql_close($myconn);
//关闭对数据库的连接
echo "你已经成功创建数据表";
//创建成功提示
?>

核心文件:

document.write("if($_GET["username"])
{
$username=$_GET["
username
"];
$myconn=mysql_connect("
localhost","root","rbt0328
"); //连接到服务器
mysql_select_db(data2,$myconn); //连接到test库
$sqlstr="
select * from counter where username='$username'
"; //查询用户名语句
$result=mysql_query($sqlstr) or die(mysql_error()); //执行查询语句
$num=mysql_num_rows($result); //查询结果保存到变量
if($num==0) //如果结果为0执行操作
{
$sqlstr="
insert into counter (username) values ('$username')
";//插入记录语句
mysql_query($sqlstr) or die(mysql_error()); //执行语句
}
$sqlstr="
select count from counter where username='$username'
";//重新查询
$result=mysql_query($sqlstr) or die(mysql_error()); //执行查询语句
$count=mysql_fetch_array($result); //结果保存到变量
$count[0]++; //自增1
echo $count[0]; //显示新结果
$sqlstr="
update counter set count=count+1 where username='$username'
";//更新数据
$result=mysql_query($sqlstr) or die(mysql_error()); //执行更新语句
mysql_close($myconn); //关闭数据库连接
}
else echo "
用户名不能为空
";
?>
位访问者"
);

运行时在WEB页插入脚本

<script language="javascript" src="">
</script>


多用户,防刷新??

阅读(1241) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~