一、操作数据库
1.1 操作MySQL的步骤
第一步:登录MySQL服务器
第二步:选择当前数据库
第三步:设置请求数据的字符集
第四步:执行SQL语句
1.2 连接MySQL
函数1:mysql_connect()
- 功能:连接(登录)到MySQL服务器。
- 语法:
$link = mysql_connect($db_host,$db_user,$db_pwd)
- 参数:
$db_host:代表MySQL服务器的主机名或ip地址,本地是localhost $db_user:代表MySQL服务器的用户账号。如:root $db_pwd:代表MySQL服务器的用户密码。如:root
- 返回值:连接成功,返回一个资源类型的标识符。如果连接失败,返回false
案例
<?php
$db_host = "localhost";
$db_user = "root";
$db_pwd = "123";
$connSql = mysql_connect($db_host,$db_user,$db_pwd);
if($connSql)
{
echo "连接成功";
}
else
{
echo "连接失败";
exit();
}
?>
exit()
功能:输出一个信息,并终止程序运行。
语法:void exit ([string '$status'])举例:exit("程序运行出错了")
mysql_errot()
功能:输出上一次操作MySQL出错的文本信息。
语法:Strint **mysql_error** ([ resource `$link` ])参数:$link代表当前的活动连接
案例:如果连接MySQL失败了,提示错误信息
<?php
$db_host = "localhost";
$db_user = "tom"
$db_pwd = "321"
$connSql=mysql_connect($db_host,$db_user,$db_pwd);
if ($connSql)
{
echo "连接成功";
} else {
echo "连接失败<br>".mysql_error();
exit();
};
?>
此时连接数据库报错了,给出了错误信息,但是也给出了系统经过信息,如下
如果不想看到这个信息,我们可以修改代码如下:
<?php
$db_host = "localhost";
$db_user = "tom"
$db_pwd = "321"
// @是用来屏蔽系统错误信息的
$connSql = @mysql_connect($db_host,$db_user,$db_pwd);
if ($connSql)
{
echo "连接成功";
} else {
echo "连接失败<br>".mysql_error();
exit();
};
?>
说明:
- @ 用来屏蔽系统错误信息
- mysql_error() 这个函数通常是用在测试过程中的,上线之前需要删除
10.3 选择数据库
mysql_slect_db()
- 功能:选择要操作的数据库
- 语法
mysql_select_db ( strint `$database_name` [, resource `$ link_identifier` ] )
- 参数:
$database: 代表你要操作的数据库名称。 [$link]可选,代表当前的活动连接。
- 返回值:成功选择返回true,选择失败返回false
案例:
<?php
$db_host = "localhost";
$db_user = "tom"
$db_pwd = "321"
$connSql=mysql_connect($db_host,$db_user,$db_pwd);
if ($connSql)
{
echo "连接成功";
} else {
echo "连接失败<br>".mysql_error();
exit();
};
//选择数据库,假设连接的库名为test库
$db_name = "test";
if(mysql_select_db($db_name))
{
echo "成功选中";
} else {
echo "选择数据库失败<br>".mysql_error();
}
?>
1.4 设置返回的数据字符集
mysql_query("set names utf8")
1.5 执行SQL语句
mysql_query()
- 功能:执行各种SQL语句。换句话说,就是向MySQL服务器发出请求。
- 语法:resource $result = mysql_query($sql [$link])
- 参数:$sql:是各种SQL语句
增加SQL: $sql = "insert into news(title,content) values('title','content')" 删除SQL: $sql = "delete from news where id=5" 更新SQL: $sql = "update news set title = '新title' where id=5" 查询SQL: $sql = "select * from news";
- 参数:$link:代表当前活动连接,如果省略,就以上一个正常打开的连接为准。
- 返回值:
当执行select、show、describe这些SQL语句时,成功返回结果集(也是一个资源的数据类型),失败返回false. 当执行delete、update/insert这些SQL语句时,成功返回true,失败返回false
案例:
<?php
$db_host = "localhost";
$db_user = "tom"
$db_pwd = "321"
$connSql=mysql_connect($db_host,$db_user,$db_pwd);
if ($connSql)
{
echo "连接成功";
} else {
echo "连接失败<br>".mysql_error();
exit();
};
//选择数据库,假设连接的库名为test库
$db_name = "test";
if(mysql_select_db($db_name))
{
echo "成功选中";
} else {
echo "选择数据库失败<br>".mysql_error();
exit();
}
//向MySQL服务器发出请求,执行sql语句
$sql = "select * from students;"
$res = mysql_query($sql);
if($res)
{
echo $res; //这里仅仅是结果集,不是具体内容
}
else
echo mysql_error();
}
?>
1.6 从结果集中读取数据
mysql_fetch_row()
- 功能:从结果集中读取一行数据,并以枚举数组返回,并且读完一行,指针下移。
- 语法:
array mysql_fetch_row(resource $result)
- 参数:$result 代表返回的结果集
- 返回值:返回一个枚举数组,也就是说这一行数据时存在数组中的,每个字段的下标是从0开始的正整数。
案例:从数据集中读取一行内容,并展示出来
$sql = "select * from students";
$res = mysql_query($sql);
if(!$res)
{
echo mysql_error();
}
//从结果集中读取出一行数据,作为枚举数组对象返回
//******每次执行只能读取出来一行*****
$resRow = mysql_fetch_row($res);
//这一行是一个数组,因此可以用print_r打印数组中的内容
echo "<pre>";
print_r($resRow);
echo "<pre>"
1.7 统计读取的行数
mysql_num_rows()
- 功能:从结果集中取出来记录总数,查询以后,找到了多少条记录。
- 语法:
int $records = mysql_num_rows($result)
- 注意:只能从结果集中返回记录总数。
- 返回值:如果没有找到,返回0
<?php
$db_host = "localhost";
$db_user = "tom"
$db_pwd = "321"
$connSql=mysql_connect($db_host,$db_user,$db_pwd);
if ($connSql)
{
echo "连接成功";
} else {
echo "连接失败<br>".mysql_error();
exit();
};
//选择数据库,假设连接的库名为test库
$db_name = "test";
if(mysql_select_db($db_name))
{
echo "成功选中";
} else {
echo "选择数据库失败<br>".mysql_error();
exit();
}
mysql_query("set numes utf8");
$resources = mysql_query($SQL);
$resourcesNum = mysql_num_rows($resources);
if ($resourcesNum == 0)
{
echo "没有找到";
}
else
{
echo "查询结果数量:".$resourceNum;
}
?>
1.8 其他的函数
mysql_fetch_array()
- 功能:从结果集中读取一行数据,并以混合数组返回。
- 语法:array mysql_fetch_array(resource $result[type])
mysql_fetch_assoc()
- 功能:从结果集中读取一行数据,并以关联数组(其实就是字符下标)返回。
- 语法:array mysql_fetch_assoc(resource $result)
二、扩展内容
2.1 urlencode() 函数
urlencode($str)的作用是对字符串$str进行url编码,方便$str作为一个变量传递给下一页,一般情况下$str有两种:
- 第一种是数组类型,如果想将数组作为url的一个参数,即必须将数组转化为一个字符串,通常是需要对数据进行json_encode,然后再urlencode即可。
- 第二种是中文,中文作为url的一个参数有时会出错,所以通过urlencode进行编码比较安全。
2.2 include()
- 功能:包含另一个文件的代码。将另一个文件的代码插入到当前文件中执行。
- 语法:include(filename)
- 举例:include("conn.php");
2.3 require()
- 功能:包含另一个文件的代码。将另一个文件的代码插入到当前文件中执行。
- 语法:require(filename)
- 举例:require("conn.php")
2.4 include和require的区别
- 这两个语法结构,除了处理错误信息不一样以外,其他的功能都一样。
- include 当遇到错误时,程序将继续向下运行,并返回警告信息。
- require 当遇到错误时,程序将中止运行,并返回致命错误信息。
因此,可以将连接数据库部分代码写作单独文件connMysql.php
<?php
header("content-type:text/html;charset=utf-8");
$db_user = "root";
$db_pwd = "123";
$db_host = "localhost";
$db_name = "hellodb";
$SQL = "select stuid,name,age from students";
$link = @mysql_connect($db_host,$db_user,$db_pwd);
if(!$link){
echo "连接数据库失败";
exit();
}
if(!mysql_select_db($db_name)){
echo "选择数据库失败";
exit();
}
mysql_query("set names utf8");
?>
然后将主程序中的相同代码删除,并调用这部分代码
<?php
require("connMysql.php");
$resources = mysql_query($SQL);
$resourcesNum = mysql_num_rows($resources);
if ($resourcesNum == 0)
{
echo "没有找到";
}
else
{
echo "查询结果数量:".$resourceNum;
}
?>
2.5 header()函数
- 功能:将数据传往浏览器是,用什么杨的字符集显示。或者,实现网页跳转功能。
- 语法:void header(strint $strint)
- 举例1:设置网页中汉字字符集:header("content-type:text/html;charset=utf-8");这个语句通常放在网页最开始部分
- 举例2:网页跳转功能:header("location:test.php?id=5"); 跳转之后,后面的代码将不再执行
补充:关于页面跳转
方法一:直接跳转
header("Location:index.html");
方法二:延时跳转
header("refresh:5;url=http://www.php001.com/index.html")
2.6 md5加密
- 功能:对字符进行加密,返回32位16进制的散列值
- 语法:md5(strint)
- 说明:md5是单向加密。
<?php $str = "Hello World"; $hash = md5($str); echo $hash; ?>
扩展:
- 单向加密:只能加密,不能解密,例如md5,sha512,sha256,定长输出,蝴蝶效应
- 对称加密:可以加密,也可以解密,加密和解密用的是同一个秘钥。
- 非对称加密:可以加密,也可以解密,加密用的是公钥,解密用的是私钥。
2.7 字符串替换
2.7.1 preg_replace() 函数
preg_replace() 函数是一个强大的正则表达式替换函数,可以快速准确地将满足某种模式的字符串替换为指定的字符串。
在移除空格时,可以利用 preg_replace() 函数来匹配空格并替换为空白字符
mixed preg_replace ( mixed $pattern ,mixed $replacement,mixed $subject [, int $limit = -1 [,int &$count ]] )
$pattern 表示要匹配的正则表达式模式
$replacement 表示替换成的字符串
$subject 表示要处理的字符串
$limit 表示最多替换的次数
$count 是一个引用变量,表示实际替换的次数
案例
$str = 'hello world';
$pattern = '/\s+/'; //匹配一个或多个空格
$replacement = '';
echo preg_replace($pattern,$replacement,$str); //输出 'helloworld'
2.7.2 str_replace() 函数
str_replace() 函数用于搜索并替换字符串中的另一个字符串。我们可以使用该函数来搜索空格并替换为空白字符
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ])
$search 表示要搜索的字符串
$replace 表示要替换成的字符串
$subject 表示要处理的字符串
$count 是一个引用变量,表示实际替换的次数
案例:
$str = 'hello world';
$search = ' ';
$replace = ' ';
echo str_replace($search,$replace,$str); //输出: 'helloworld'
2.8 页面直接跳转
实现页面直接跳转有两种方法
方法一:在php中,执行js代码,实现跳转
echo '<script> location.href="http://www.zx.com/2.php" </script>';
方法二:在php中,直接执行header方法,实现跳转
header("location:http://www.zx.com/2.php");
2.9 页面延时跳转
方法一:在php中,执行js代码,实现跳转
<script language="JavaScript">
function myrefresh(){
location.href="<?php echo http://www.baidu.com ?>";
}
setTimeout('myrefresh()',3000); //指定3秒跳转
</script>
方法二:在php中,直接执行header方法,实现跳转
<?php
header("refresh:5;url=http://www.xxxx.com");
print('正在加载,请稍等...<br>五秒后自动跳转');
?>
三、服务端接受数据问题
在php中,服务端是通过$_SERVER 来接收客户端传递的数据的
- $_SERVER['SERVER_NAME']:当前运行脚本所在服务器主机的名称。
- $_SERVER['SERVER_PROTOCL']:请求页面时通信协议的名称和版本。例如,"HTTP/1.0"。
- $_SERVER['REQUEST_METHOD']:访问页面时的请求方法。例如:"GET"、"HEAD"、"POST"、"PUT"。
- $_SERVER['QUERY_STRING']:查询(query)的字符串
- $_SERVER['DOCUMENT_ROOT']:当前运行脚本所在的文档根目录。在服务器配置文件中定义。
- $_SERVER['HTTP_ACCERT']:当前请求的Accept:头部的内容。
- $_SERVER['HTTP_CONNECTION']:当前请求的 Connection:头部的内容。例如:“Keep-Alive”。
- $_SERVER['HTTP_HOST']:当前请求的HOST:头部内容。
- $_SERVER['HTTP_REFERERE']:连接当前页面的前一页面的URL地址。
- $_SERVER['HTTP_USER_AGENT']:当前请求的User_Agent:头部内容。
- $_SERVER['HTTPS']:如果通过https访问,则被设为一个非空的值(on)否则返回off。
- $_SERVER['REMOTE_ADDR']:正在浏览当前页面用户的IP地址。
- $_SERVER['REMOTE_HOST']:正在浏览当前页面用户的主机名
- $_SERVER['REMOTE_POSRT']:用户连接到服务器时所使用的端口
- $_SERVER['SERVER_PORT']:服务器所使用的端口
- $_SERVER['HTTP_X_FORWARDED_FOR']:通过代理服务器取得客户端的真实IP地址
- $_SERVER['HTTP_VIA']:代理服务器IP
- $_SERVER['HTTP_CLIENT_IP']:客户端IP