PHP学习笔记之连接mysql数据库

 更新时间:2016年11月25日 15:02  点击:1387
接触PHP已经有一段时间了,今天写一篇关于PHP连接MYSQL数据库的文章,也算是自己对学习PHP与数据库的一点总结。


果文章出现错误,希望各位包涵、指出。

言归正传,对于PHP来讲,它是默认支持MYSQL的,也就是说我们不必再去手动设置ODBC来使用MYSQL了,我们所需要做的设置就是在php.ini中引入MYSQL插件。首先找到你的php.ini,编辑它,将extension = php_mysql.dll前的分号(“;”)去掉即可。这样,我们的php就可以使用MYSQL了。

 接下来我们连接mysql,mysql_connect(servername:port,username,password)就是用于连接mysql的函数,其中servername:port参数就是数据库地址以及数据库端口(默认情况下port参数为3306);username即是登陆数据库所使用的用户名,password则是对应用户的密码。由于我的数据库就在本机上所以连接时我使用以下语句。

 
连接代码

$con = mysql_connect("localhost","root","");  //$con可理解为连接号

当然我们不能让mysql一直处于连接状态,对于小型应用来说或许这不算问题,但对于大型web应用来讲这是很浪费资源的,所以用完数据库连接之后我们要关掉它。这个任务我们交给mysql_close(连接号)来完成。


开启和关闭数据库连接

 代码如下 复制代码
$con = mysql_connect("loaclhost","root","");  
$con = mysql_close($con);  

 
 
弄明白了如何连接和断开数据库,接下来就是在mysql中创建数据库,这听起来很拗口,因为同一台mysql服务器中可以允许多个数据库的存在。这里我们有两种方法来建立数据库,法一使用mysql_create_db()函数,但不建议大家使用这种方法。

 
创建数据库

 代码如下 复制代码

$con = mysql_connect("localhost","root","");  
mysql_create_db("guestbook",$con);  
mysql_close($con);  

法二,我们直接采用mysql_query()函数来执行sql语句。Create DATABASE 就是用于创建数据库的sql语句,例如Create DATABASE test,就是创建一个名为test的数据库。
 

创建数据库

 代码如下 复制代码

$con = mysql_connect("localhost","root","");    
mysql_query("Create DATABASE guestbook",$con);    
mysql_close($con);   

 

 建完数据库,我们要向数据库中添加数据表。同样是采用mysql_query()函数来执行sql语句,但不同的是之前我们要使用mysql_select_db()函数来选择我们操作的数据库。

 代码如下 复制代码

$con = mysql_connect("localhost","root","");      
mysql_query("Create DATABASE guestbook",$con);  
mysql_select_db("guestbook",$con);  
mysql_query("Create TABLE users(username varchar(15), 
password varchar(15))");      
mysql_close($con);  
/*  建表语句: Create TABLE 表明(字段名_1 字段数据类型_1,字段名_2 字段数据类型_2,......,字段名_n 字段数据类型_n)      */ 

 


在数据库中建立好表、字段等数据数据关系之后,就差实实在在的数据了。同上,使用mysql_query()函数执行添加数据的sql语句,Insert INTO 表名 (字段名_1,字段名_2,......,字段名_n) VALUES (数据_1,数据_2,......,数据_n)。

 代码如下 复制代码

 
$con = mysql_connect("localhost","root","");        
mysql_query("Create DATABASE guestbook",$con);    
mysql_select_db("guestbook",$con);    
mysql_query("Create TABLE users(username varchar(15),  
password varchar(15))");    
mysql_query("Insert INTO users (username,password) VALUES ('Ku_Andrew','123456')");      
mysql_close($con);   

现在,我们的数据库中已经有了数据,接下来我们使用select语句来进去查询。

 代码如下 复制代码
$con = mysql_connect("localhost","root","");        
mysql_query("Create DATABASE guestbook",$con);    
mysql_select_db("guestbook",$con);    
mysql_query("Create TABLE users(username varchar(15),  
password varchar(15))");   
$select = mysql_query("select * from users");  
while ($row = mysql_fetch_array($select);)  
{  
    echo $row['username'];  
    echo $row['password'];  
}  
mysql_close($con); 

  

这样,通过while循环我们就可以把users表中所有的数据全部查询出来,上面这样做不好重复利了,下面我们可以做成数据库连接类。

 代码如下 复制代码

<?php
//------------------------------------------------------------------------------------------
// ※Database()                   构造函数,数据库初始参数
// ※Select()                     查询
// ※GetRows()                    返回查询的记录总数
// ※Insert()                     插入记录
// ※Update()                     更新
// ※Delete()                     删除
// ※Halt()                       中断并显示错误信息 111Cn.Net */
//------------------------------------------------------------------------------------------
define("DATABASETYPE", "1");       //定义数据库类型:1为MySql;2为SQL Server;3为Oracle;4为Odbc
define("SERVER", "localhost");     //Host name or IP address of the database server
define("DATABASE", "dbName");   //要连接的数据库名
define("USER", "tableName");     //用于连接数据库的用户名
define("PASSWORD", "paswd");    //用于连接数据库的密码 

class Database {
    var $dbLink;                      //连接句柄
    var $result;                      //查询句柄
    var $insId;                       //Insert()成功返回AUTO_INCREMENT列的值
    var $rows;                        //返回数据数组
    var $numRows;                     //返回数据数目
    var $dbHost, $dbUser, $userPassword, $database;
    var $dbType = DATABASETYPE;
    var $msgFlag = "yes";            //yes:show the Mysql message ; no: die by show "Halted."

    function Database($dbHost = SERVER, $dbUser = USER, $userPassword = PASSWORD, $database = DATABASE) {
        switch ($this->dbType) {
            case 1:
                $this->dbLink = @mysql_pconnect($dbHost, $dbUser, $userPassword); // or die("Can't Connect to Remote Host!");
                @mysql_select_db($database, $this->dbLink); // or die ("Can't Connect to Remote Host!");
                break;
            case 2:
                break;
        }
        return true;
    }

    /* SQL:Select() 返回为false无结果 */

    function Select($table, $columns, $condition = 1) {
        $sql = "select $columns from $table where $condition ";
        $this->result = @mysql_query($sql, $this->dbLink);
        unset($this->rows);
        if ($this->result) {
            $i = 0;
            if (!($this->rows = array("$i" => @mysql_fetch_array($this->result))))
                return false;
            if (($this->numRows = @mysql_num_rows($this->result)) == 0)
                return false;
            while ($tempRows = @mysql_fetch_array($this->result)) {
                array_push($this->rows, $tempRows);
            }
        } else {
            $this->Halt($sql);
            return false;
        }
        return true;
    }

    /* SQL:GetRows() 返回查询的记录总数 */

    function GetRows($table, $condition = 1) {
        $sql = "select count(1) as count from $table where $condition";
        $this->result = @mysql_query($sql, $this->dbLink);
        if ($this->result) {
            $temp = @mysql_fetch_array($this->result);
            $this->numRows = $temp[count];
        } else {
            $this->Halt($sql);
            return false;
        }
        return $this->numRows;
    }

    /* SQL:Insert() */

    function Insert($table, $columns, $values) {
        $sql = "insert into $table ($columns) values ($values)";
        $this->result = @mysql_query($sql, $this->dbLink);
        if ($this->result)
            $this->insId = @mysql_insert_id($this->dbLink);
        else {
            $this->Halt($sql);
            return false;
        }
        return true;
    }

    /* SQL:Update() */

    function Update($table, $setings, $condition) {
        $sql = "update $table set $setings where $condition";
        $this->result = @mysql_query($sql, $this->dbLink);
        if ($this->result)
            $this->numRows = @mysql_affected_rows($this->result);
        else {
            $this->Halt($sql);
            return false;
        }
        return true;
    }

    /* SQL:Delete */

    function Delete($table, $condition) {
        $sql = "delete from $table where $condition";
        $this->result = @mysql_query($sql, $this->dbLink);
        if ($this->result)
            $this->numRows = @mysql_affected_rows($this->result);
        else {
            $this->Halt($sql);
            return false;
        }
        return true;
    }

    /* Halt():error message */

    function Halt($msg) {
        if ($this->msgFlag == "yes") {
            printf("<b>Database Query Error:</b> %s<br>n", $msg);
            printf("<b>MySql Error:</b> %s<br>n", mysql_error());
        }else
            echo "<META HTTP-EQUIV=REFRESH CONTENT='0;URL=../include/error.htm'>"; //自定一个出错提示文件
        return false;
    }
}

switch ($db->dbType) {
    case 1:
        @mysql_close();
        break;
    case 2:
        break;
}
$db = new Database();
?>

在php中cookie和session经常是配合使用的,但是cookie安全性没有session高了,session只在服务器端而cookie在客户端,这个自然就明白它们的区别了,但它们经常用于各种登录验证,下面我来介绍。

Cookie和Session算是网站登陆验证的常用手段了。不管论坛也好,微博也好,它们都依赖于cookie和session以完成各项工作。

这里就不具体介绍Cookie和Session的概念了,我们可以简单的把它们理解为临时钥匙,用于开启不同的网络资源。
 

下面开始介绍在PHP里如何操作Cookie和Session。
 

Cookie:

  在PHP里,我们可以使用setcookie()函数来设置cookie。但特别注意,setcookie函数必须置于<html>标签之前。setcookie函数包含了一下几个参数:setcookie(name, value, expire, path, domain)。name参数是用来规定cookie的名称的,而value则是规定对应名称cookie的值,expire则是设定cookie有效期的。特别注意path和domain参数可选的。(path是规定cookie的服务器路径,而domain是规定cookie的所有域名)。


一般我们这样设置cookie

 
设置cookie

 代码如下 复制代码

<?php  
setcookie("username","Ku_Andrew",time()+3600);  
?>  

 

username就是我们cookie的名字了,而Ku_Andrew则是username的值,time()+3600就是一小时后该cookie过期。

 

现在我们用$_COOKIE来做一个实例

 
设置、读取cookie

 代码如下 复制代码

<?php  
$username = $_COOKIE['username'];  
if ($username == "")  
    {  
    setcookie("username","Ku_Andrew",time()+3600);  
    echo "we've not found your username from your cookie";  
    echo "but now we've give it to you , please refresh this page";  
    die("<a href=$PHP_SELF>kick me and refresh</a>");  
    }  
else  
    {  
    echo ("hello $usernama");  
    }  
?>  

 

如果想做出更复杂的判断,例如用户登陆等,我们可以在IF语句中的加入从数据库从检索出来的值。

 
Session:

  与Cookie不同,Session是保存在服务器上的,同时Session会随着浏览器的关闭而自动灭亡,生命周期较短。在PHP上,我们使用session_start()函数来启动session;与设置cookie相同,我们必须在<html>标签之前使用这个函数。使用这个函数之后我们就可以开始设置我们的Session变量了。方法也是极为简单:用$_SESSION数组直接定义。完成了定义,在不使用的时候为了节约服务器资源,我们要关闭它。这时可以使用unset()函数或者session_destroy()函数;unset()是解除变量,session_destroy()则是彻底终结session。下面是代码片段。

 
Session设置、读取

 代码如下 复制代码

<?php  
session_start();  
if ($_SESSION['pid'] == "")  
{  
    $_SESSION['pid'] = 1;  
}  
else  
{  
    $_SESSION['pid'] += 1;  
}  
echo "this is your $_SESSION['pid'] times watching this page";  
?>  

 
这是一个简单的网页计数器,通过设置pid来实现计数。第一次判断中,如果session为空,那么设置成一,并且读取session,反馈给用户。以后的每次访问,都会在原有session的基础上逐次加一反馈给用户。

在php判断星期几其实很简单,因为我们的data函数可带参数W来获取0,1,2,3,4,5,6分别为周日到周六了,下面我们看个实例。

php日期函数date里面有个参数w代表周几

w分别表示为: 0 周日 1 周一 2 周二 … 6 周六

所以我们判断今天是周几的话  直接:

 代码如下 复制代码

$w = date('w');

//注意上面返回的都是 数字,0123456.所以如果要显示中文的星期,可以定义下面的数组就可以了。

$weekarray=array("日","一","二","三","四","五","六"); //0表示星期日

echo '周'.$weekarray[$w];

而判断某天是星期几  格式为

 代码如下 复制代码

date(‘w’,unix时间毫秒)

echo date('w',strtotime('2012-05-09 12:23:30'));

在php中保留小数点的函数有很多,如:sprintf,round函数等等下面我分别来给各位同学介绍这些函数怎么实现保留指定小数位的方法,大家可参考。

sprintf函数

 代码如下 复制代码

<?php
$number = 926926.066666;
echo sprintf("%.2f", $number);
?> 

输出结果:926926.07

php进一法取整

 代码如下 复制代码

echo ceil(4.3);    // 5
echo ceil(9.999);  // 10

php舍去法,取整数

 代码如下 复制代码


1.echo floor(4.3);   // 4  
2.echo floor(9.999); // 9

在php中http_build_query函数是一个被大多数据程序员看忘记的函数,就我现在都不知道http_build_query的作用,下面我给大家分享一篇文章一起来学习学习吧。

具体方法

当我们使用CURL来post数据的时候,需要设置post的数据

curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

假如这里的$data是

$data = array(
   'name'=>'www.111cn.net',
   'time'=>'2012-2-3'
)

接下来,需要先将$data变成字符串

$post_data = http_build_query($data);

而采用 http_build_query 转换后再

curl_setopt($c, CURLOPT_POSTFIELDS, $post_data);

看起来没有什么问题。但在实际操作中,$post_data 并没有被post过去。于是,自己写了个转换的方法后就OK了。

 代码如下 复制代码

function getStr($array,$Separator='&') {
        if (empty($array))
            return;
        if (!is_array($array)) {
            return $array;
        }
        $returnStr = '';
        foreach ($array as $key => $val) {
            $temp = '';
            if (is_array($val)) {
                for ($i = 0; $i < count($val); $i++) {
                    $returnStr .= $key . '[' . $i . ']' . '=' . $val[$i] . $Separator;
                }
            } else {
                $returnStr.= $key . '=' . $val . $Separator;
            }
        }
        $returnStr = substr(trim($returnStr), 0, -1);
        return $returnStr;
    }

感谢 黄斌-huangbin 童鞋的测试 http_build_query($data,"","&"); 即可,无需自己写方法解析了。


http_build_query 就是将一个数组转换成url ?后面的参数字符串,会自动进行urlencode处理

string http_build_query ( array formdata [, string numeric_prefix])

后面的给数组中没有指定键或者键为数字的加下标

[!--infotagslink--]

相关文章

  • PHP 数据库缓存Memcache操作类

    操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
  • C#连接SQL数据库和查询数据功能的操作技巧

    本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Intellij IDEA连接Navicat数据库的方法

    这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 如何解决局域网内mysql数据库连接慢

    通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
  • MySQL快速复制数据库数据表的方法

    某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
  • mysqldump命令导入导出数据库方法与实例汇总

    mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
  • Mysql数据库错误代码中文详细说明

    1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
  • c#异步读取数据库与异步更新ui的代码实现

    这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
  • Yii2.0高级框架数据库增删改查的一些操作

    yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
  • MYSQL数据库使用UTF-8中文编码乱码的解决办法

    1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
  • springBoot 项目排除数据库启动方式

    这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
  • Linux 下使用shell脚本定时维护数据库的案例

    这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Java连接数据库oracle中文乱码解决方案

    这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16