PHP连接MYSQL数据库的常用方法

 更新时间:2016年11月25日 16:34  点击:1615
连接MYSQL数据库的方法有许多了其实我们只要使用不同的连接函数与接口即可实现了,下面给各位整理三种PHP连接MYSQL数据库的常用方法,希望文章对各位有用.
第一、常用普通方法

 

 代码如下 复制代码

$mysql_server="localhost";
$mysql_username="数据库用户名";
$mysql_password="数据库密码";
$mysql_database="数据库名";
//建立数据库链接
$conn = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die("数据库链接错误");
//选择某个数据库
mysql_select_db($mysql_database,$conn);
mysql_query("set names 'utf8'");
//执行MySQL语句
$result=mysql_query("SELECT id,name FROM 数据库表");
//提取数据
$row=mysql_fetch_row($result);

 

在提取数据的时候,我们使用mysql_fetch_row,还可以使用mysql_fetch_assoc和mysql_fetch_array,具体的我们参考手册。

 

第二、面向对象方法

 

 代码如下 复制代码

$db=new mysqli($dbhost,$username,$userpass,$dbdatabase);
if(mysqli_connect_error()){
echo 'Could not connect to database.';
exit;
}

$result=$db->query("SELECT id,name FROM user");
$row=$result->fetch_row();

 

第三、PDO方法

 

 代码如下 复制代码

$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';'
$dbh=new PDO($dsn,$username,$userpass);

$stmt=$dbh->query('SELECT id,name FROM user');
$row=$stmt->fetch();

 

以上是常用的3种PHP连接MYSQL数据库的方法,我们可以尝试使用,一般我们用第一种比较多。
本文章来为各位介绍一篇关于PHP创建MYSQL数据库与数据表常用命令和数据类型设定的例子,希望这篇教程能够帮助到各位朋友.

其实准备学习PHP语言已经有计划好几年,但都忙于一些事情没有静心尝试,鉴于项目的需要,必须要学点技术,所以准备把前端、前端框架以及PHP这个后端应用逐渐的学习起来。根据以往的学习进度和习惯,还是直接做项目比较直接,因为老蒋自认为不是很聪明,那种函数、数组真的搞不明白,也记不住,所以直接从实例下手。

在涉及到数据库添加的时候,我们可以直接在PHPMYADMIN面板中直接可视化添加,但是我还是喜欢直接用SQL命令添加,这样比较方便,看似也高大上,更有平时使用VPS的时候也有点习惯。

在这个项目中,我是需要做一个简单的留言本,所以我添加的字段和数据类型如下:

CREATE TABLE gustbook(
`id` int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(`id`),
`user` varchar(25) NOT NULL,
`title` varchar(50) NOT NULL,
`content` tinytext NOT NULL,
`lastdate` date NOT NULL)
ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
我先添加一个数据库,直接PHPMYADMIN上添加或者使用"CREATE DATABASE database_name"这样的命令语句,然后添加数据表。就是上面的命令,直接丢到SQL语句里执行,必须要有一个主键字段ID,然后添加用户名、标题、内容、以及最后的更新时间。这样留言板的功能字段就算齐全。

ENGINE=InnoDB 是选择引擎
DEFAULT CHARSET=gbk 默认字符集
AUTO_INCREMENT=1 是设定该字段为自增字段,每次增加1
基本上可以通用,我们只要稍微修改就可以用到其他任意的普通项目表添加中。

Session我们有时会存储在服务器,但有时也会放到数据库中,下面我们来看一篇关于php Redis存储Session的例子详解,具体如下。

安装redis服务以及php redis扩展

一:redis安装

Download, extract and compile Redis with:
$ wget http://download.redis.io/releases/redis-3.0.4.tar.gz
$ tar xzf redis-3.0.4.tar.gz
$ cd redis-3.0.4
$ make
The binaries that are now compiled are available in the src directory. Run Redis with:
$ src/redis-server
You can interact with Redis using the built-in client:
$ src/redis-cli
redis> set foo bar
OK
redis> get foo
"bar"

More:http://www.redis.io/download

二、php扩展:

更多版本:http://pecl.php.net/package/redis
wget http://pecl.php.net/get/redis-2.2.5.tgz
#解压
tar zxvf redis-2.2.5.tgz
#进入安装目录
cd redis-2.2.5
/usr/local/php/bin/phpize
#配置
./configure --with-php-config=/usr/local/php/bin/php-config
#编译安装
make  && make install

安装完成之后,出现下面的安装路径

/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

配置php支持


#编辑配置文件,在最后一行添加以下内容

vim /usr/local/php/etc/php.ini 
extension="redis.so"

这个时候phpinfo()就可以看到redis扩展了。

redis小例子:

$redis = new redis();
$test=$redis->connect('127.0.0.1', 6379);
var_dump($test);
 
$result = $redis->set('test',"111cn.net");
var_dump($result);    //结果:bool(true)
 
$result = $redis->get('test');
var_dump($result);   //结果:string(11) "111cn.net"

修改php.ini的设置

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"

修改后重启php-fpm,phpinfo()可以查看到session存储在redis中。

如果不想修改php.ini,可在代码中加入:

ini_set("session.save_handler","redis");
ini_set("session.save_path","tcp://127.0.0.1:6379");

如果redis.conf设置了连接密码(requirepass),session的save_path需修改为:tcp://127.0.0.1:6379?auth=requirepass的值。
如果选择redis数据库,session.save_path = "tcp://xx.xx.xx.xx:6789?database=11",诸如此类。

查看redis存储session的值:

<?php
session_start();
$_SESSION['sessionid'] = 'www.111cn.net';
 
$redis = new redis();
$redis->connect('127.0.0.1', 6379);
//redis用 PHPREDIS_SESSION: 加 session_id 作为key,并且是以string的形式存储
echo $redis->get('PHPREDIS_SESSION:' . session_id()); //输出www.111cn.net
?>

在网上看到有人质疑redis存储session值会有并发一致性的问题(文件存储session有文件锁来处理),这块没有研究。

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数来调用执行它。

最近使用PHP数据库访问最新的一种技术 POD,不封装,代码也写得很少。 下面我将贴出我的代码。

代码部分:

<?php
 $dsn = "mysql:host=localhost;dbname=mysqldatabasedemo";
 $db = new PDO($dsn,'root','123456@#',array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET
   NAMES'GBK';"));
  $someInParameter1='hellow';
  $stmt = $db->prepare("CALL outputProcudure(:addName,@outASD)");
  $stmt->bindParam(':addName', $someInParameter1);
   if($stmt->execute())
   {
      $rs=$db->query('select @outASD')->fetchAll();
      $dataArray=$rs[0];
      echo("<script type='text/javascript'> alert('"+$dataArray[0]+"');</script>");
   }
   else
   {
    echo("<script type='text/javascript'> alert('插入失败');</script>");
   }
?>



mysql存储过程:




PHP_PDO 调用mysql 带返回参数的存储过程

    DROP PROCEDURE IF EXISTS pro_test;  
      
    create procedure pro_test(in val VARCHAR(50) ,out rtn int)  
    begin  
    declare err INT default 0;  
    -- 如果出现异常,会自动处理并rollback  
    declare exit handler for  sqlexception ROLLBACK ;
-- 启动事务  
start transaction;
insert into test_user values(NULL,1,'啊是大三的');  
-- set err = @@IDENTITY; -- =   获取上一次插入的自增ID;  
set err =last_insert_id(); -- 获取上一次插入的自增ID  
insert into test_user VALUES(NULL,val,err);  
  
-- 运行没有异常,提交事务  
commit;  
-- 设置返回值为1  
set rtn=1;  
end;
$name = '成都市';  
          
        $stmt = $db->prepare("CALL pro_test(?,@sp_result);");  
        $stmt->bindParam(1, $name);  
        $stmt->execute ();  
        $outputArray = $db->query("select @sp_result")->fetch(PDO::FETCH_ASSOC);
<span style="font-family: Arial, Helvetica, sans-serif;">               </span><span style="font-family: Arial, Helvetica, sans-serif;">print_r($outputArray["@sp_result"]);</span>


memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。服务器端仅包括内存存储功能,其实现非常简单。至于memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。

一台Memcache通常不能满足我们的需求,这就需要分布式部署。Memcached分布式部署方案通常会采用两种方式,一种是普通Hash分布,一种是一致性Hash分布。本篇将以PHP作为客户端,来分析两种方案。
    一、普通Hash分布:
<?php
function test($key='name'){
    $md5 = substr(md5($key), 0, 8);
    $seed = 31;
    $hash = 0;
    for($i=0; $i<8; $i++){
        $hash = $hash * $seed + ord($md5[$i]);
    }
    return $hash & 0x7FFFFFFF;
}

$memcacheList = array(
        array('host'=>'192.168.1.2', 'port'=>6379),
        array('host'=>'192.168.1.3', 'port'=>6379),
        array('host'=>'192.168.1.4', 'port'=>6379),
        array('host'=>'192.168.1.5', 'port'=>6379),
);
$key = 'username';
$value = 'lane';
//根据KEY获取hash
$hash = $this->test($key);
$count = count($memcacheList);
$memcache = $memcacheList[$hash % $count];
$mc = new Memcached($memcache);
$mc->set($key, $value);
?>

    代码很简单,一个Hash函数,根据所需要的key,将他md5后取前8位,然后经过Hash算法返回一个整数。将这个整数对服务器总数求模。得到的就是服务器列表的编号。这种方式的缺点是服务器数量改变后,同一个key不同hash,将取不到值了。

    二、一致性Hash分布
    一致性Hash尽管也会造成数据的丢失,但是损失是最小的。
    将2的32次方-1想象成一个圆环,服务器列表在上面排列。根据key通过hash算法求得在圆环上的位置,那么所需要的服务器的位置在key的位置前面最近的一个(顺时针)。
<?php
class FlexiHash{
    //服务器列表
    private $serverList = array();
    //是否排序
    private $isSort = false;

    /**
     * Description: Hash函数,将传入的key以整数形式返回
     * @param string $key
     * @return int
     */
    private function myHash($key){
        $md5 = substr(md5($key), 0, 8);
        $seed = 31;
        $hash = 0;
        for($i=0; $i<8; $i++){
            $hash = $hash * $seed + ord($md5[$i]);
        }
        return $hash & 0x7FFFFFFF;
    }

    /**
     * Description: 添加新服务器
     * @param $server
     */
    public function addServer($server){
        $hash = $this->myHash($server);
        if(!isset($this->serverList[$hash])){
            $this->serverList[$hash] = $server;
        }
        $this->isSort = false;
        return true;
    }

    /**
     * Description: 删除指定服务器
     * @param $server
     * @return bool
     */
    public function removeServer($server){
        $hash = $this->myHash($server);
        if(isset($this->serverList[$hash])){
            unset($this->serverList[$hash]);
        }
        $this->isSort = false;
        return true;
    }

    /**
     * Description: 根据要操作的KEY返回一个操作的服务器信息
     * @param $key
     * @return mixed
     */
    public function lookup($key){
        //将指定的KEYhash出一个整数
        $hash = $this->myHash($key);
        if($this->isSort !== true){
            krsort($this->serverList);
            $this->isSort = false;
        }
        foreach($this->serverList as $key=>$server){
            if($key <= $hash){
                return $server;
            }
        }
        return array_pop($this->serverList);
    }
}
//使用方法
$mc = new FlexiHash();
$mc->addServer('192.168.1.2');
$mc->addServer('192.168.1.3');
$mc->addServer('192.168.1.4');
$mc->addServer('192.168.1.5');

echo 'KEY=key1时,操作的服务器为:'.$mc->lookup('key1').'<br>';
echo 'KEY=key1时,操作的服务器为:'.$mc->lookup('key2').'<br>';
echo 'KEY=key1时,操作的服务器为:'.$mc->lookup('key3').'<br>';
echo 'KEY=key1时,操作的服务器为:'.$mc->lookup('key4').'<br>';
echo 'KEY=key1时,操作的服务器为:'.$mc->lookup('key5').'<br>';
?>

[!--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
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • C# 10个常用特性汇总

    这篇文章主要介绍了C# 10个常用特性,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-09
  • 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
  • Java连接数据库oracle中文乱码解决方案

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

    “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25