首页 > 编程技术 > php

phpMyAdmin 高级功能设置的方法图解

发布时间:2016-11-25 16:35

phpmyadmin还有高级功能可能大部份站长不知道吧,今天本文章就来给大家介绍phpMyAdmin 高级功能设置的方法图解,希望文章对大家会有所帮助。

phpMyAdmin 安装后,默认其高级功能是不开启的,所以一般登录到 phpMyAdmin 后,会提示“phpMyAdmin 高级功能尚未完全设置,部分功能未激活。请点击这里查看原因。”。而所谓的高级功能,其实就是存储 phpMyAdmin 的各种参数到数据库中。
  要解决这个问题也不难,实际上根据 phpMyAdmin 的提示一步一步也能完成。这里简单记录一下过程。

  第一步,在 phpMyAdmin 源码的 examples 目录下有个 create_tables.sql 文件,这就是创建名为 phpmyadmin 数据库的SQL文。当你用 root 用户登录 phpMyAdmin 后,在“导入”页面,上传这个 create_tables.sql 文件即可成功创建数据库phpmyadmin。
phpmyadmin import  第二步,创建完数据库 phpmyadmin 后,展开左侧phpmyadmin,出现12张表名。

phpmyadmin database  第三步,更改配置文件 (config.inc.php)中参数,参见 config.sample.inc.php 中的范例。有关 phpMyAdmin configuration storage settings 的设置如下:

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';

  第四步,退出,并重新登录 phpMyAdmin 以加载新配置并使其生效。

  需要注意的是,我记得老版本中的 create_tables.sql 创建出的表名,类似于pma_bookmark,是一条下划线“_”,而不是现在的pma__bookmark,两条下划线“__”,因此配置文件中也要做出相应的更改。

  2013年12月18日更新:
  由于 phpMyAdmin 的版本 4.1.1 所创建的 phpmyadmin 数据库新增了 3 张表,所以其配置文件 config.inc.php 也需作相应的变更。最新版 phpMyAdmin configuration storage settings 的设置如下:

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
$cfg['Servers'][$i]['relation'] = 'pma__relation';
$cfg['Servers'][$i]['table_info'] = 'pma__table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma__column_info';
$cfg['Servers'][$i]['history'] = 'pma__history';
$cfg['Servers'][$i]['tracking'] = 'pma__tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma__designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
$cfg['Servers'][$i]['recent'] = 'pma__recent';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';

偶尔要用到php做一些mysql数据库的操作测试,自己写起来太麻烦,搜索的结果一般都又包含一大堆没用的代码,这里将php mysql的操作做一下总结,希望以后用到的时候不用再感到麻烦了。
 代码如下 复制代码

<?php
$dbhost='localhost';
$dbuser='root';
$dbpass='123456';
$dbname='products';
$connect=mysql_connect($dbhost,$dbuser,$dbpass);
if(!$connect) exit('数据库连接失败!');
mysql_select_db($dbname,$connect);
mysql_query('set names utf8');
//查询
$sql="SELECT * FROM `category`";
$result=mysql_query($sql);
while($row=mysql_fetch_array($result)){
 echo $row['id'];
}
//插入
$sql="INSERT INTO `category` (`id`,`name`) VALUES (NULL,'".$name."')";
$result=mysql_query($sql);
if(mysql_affected_rows()){
 echo '插入成功,插入ID为:',mysql_insert_id();
}else{
 echo '插入失败:',mysql_error();
}
//修改
$sql="UPDATE `category` SET `name`='".$name."' WHERE `id`='".$id."'";
$result=mysql_query($sql);
if(mysql_affected_rows()){
 echo '修改成功!';
}
//删除
$sql="DELETE FROM `category` WHERE `id`='".$id."'";
$result=mysql_query($sql);
if(mysql_affected_rows()){
 echo '删除成功!';
}
//关闭连接
mysql_close($connect);
在WEB应用程序开发数据库操作类是一个必不可少的东西了, 当然大家可以直接连接数据库进行查询,但这样维护不方便,下面我整理了一个不错的PHP数据库处理类与各位分享


最近在看后盾网的php视频,主要内容是相关制作一个博客系统,感觉还是很有收获。

简单的数据库处理类

下面是其中讲到的一个简单的数据库处理类,请见源码:

  

 代码如下 复制代码
  <?php
    /**
    * Created by JetBrains PhpStorm.
    * User: YangLiu
    * Date: 2013-7-12
    * Time: 下午6:19
    * Description:这是一个简单的数据库操作类,便于快速向数据库插入数据、删除数据,更新数据
    */
    class db {
    //数据库连接
    protected $mysqli;
    //表名
    protected $table;
    //选项
    protected $opt;
    /***
    * 构造方法
    * @param $tab_name
    */
    function __construct($tab_name){
    $this->config($tab_name);
    }
    
    // 配置方法
    protected function config($tab_name){
    $this->db=new mysqli(DBHOST,DBUSER,DBPWD,DBNAME);
    //DBFIX为数据库表前缀
    $this->table = DBFIX.$tab_name;
    if(mysqli_connect_errno()){
    echo "数据库连接错误".mysqli_connect_errno();
    exit();
    }
    $this->db->query("SET NAMES 'GBK'");
    
    //给opt数组设置初始值
    $this->opt['field'] = '*';
    $this->opt['where']=$this->opt['order']=$this->opt['limit']=$this->opt['group'] = '';
    }
    
    // 获得当前表字段
    function tbFields(){
    $result = $this->db->query("DESC {$this->table}");
    $fieldArr = array();
    while(($row = $result->fetch_assoc())!=false){
    $fieldArr[] = $row['Field'];
    }
    return $fieldArr;
    }
    
    // 获得查询字段
    function field($field){
    $fieldArr = is_string($field)?explode(",",$field):$field;
    if(is_array($fieldArr)){
    $field = '';
    foreach($fieldArr as $v){
    $field.='`' . $v. '`' . ',';
    }
    }
    return rtrim($field,',');
    }
    
    // SQL条件方法
    function where($where){
    $this->opt['where'] = is_string($where) ?"WHERE " . $where : '';
    return $this;
    }
    
    //limit方法
    function limit($limit){
    $this->opt['limit'] = is_string($limit) ? "LIMIT ".$limit : '';
    return $this;
    }
    
    //排序方法
    function order($order){
    $this->opt['order'] = is_string($order) ? "ORDER BY ".$order:'';
    return $this;
    }
    
    // 分组GROUP BY
    function group($group){
    $this->opt['group'] = is_string($group) ? 'GROUP BY'.$group : '';
    return $this;
    }
    
    //SELECT
    function select(){
    $sql = "SELECT {$this->opt['field']} FROM {$this->table}
    {$this->opt['where']} {$this->opt['group']} {$this->opt['limit']}
    {$this->opt['order']} ";
    return $this->sql($sql);
    }
    
    //DELETE方法
    function delete($id=''){
    if($id == '' && empty($this->opt['where'])){
    die('查询条件不能为空');
    }
    if($id != ''){
    if(is_array($id)){
    $id = implode(',',$id);
    }
    $this->opt['where'] = "WHERE id IN (" .$id. ")";
    }
    $sql = "DELETE FROM {$this->table} {$this->opt['where']} {$this->opt['limit']}";
    //echo $sql."<br/>";
    return $this->query($sql);
    }
    
    //查阅单条记录
    function find($id){
    $sql = "SELECT {$this->opt['field']} FROM {$this->table} WHERE `id` = {$id}";
    //echo $sql.'<br>';
    return $this->sql($sql);
    }
    
    // 添加数据
    function insert($args){
    is_array($args) or die('参数非数组');
    $fields = $this->field(array_keys($args));
    $values = $this->values(array_values($args));
    $sql = "INSERT INTO {$this->table} ({$fields}) VALUES($values)";
    if($this->query($sql)>0){
    return $this->db->insert_id;
    }
    return false;
    }
    
    // 更新UPDATE
    function update($args){
    is_array($args) or die("参数非数组");
    if(empty($this->opt['where'])) die("条件不能为空");
    $set = '';
    $gpc = get_magic_quotes_gpc();
    while(list($k,$v) = each($args)){
    $v = !$gpc?addslashes($v):$v;
    $set.="`{$k}`='".$v."',";
    }
    $set = rtrim($set,',');
    $sql = "UPDATE {$this->table} SET $set {$this->opt['where']}";
    return $this->query($sql);
    }
    
    // 统计所有记录数
    function count($tabname=''){
    $tabname = $tabname==''?$this->table:$tabname;
    $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
    //echo $sql.'<br/>';
    return $this->query($sql);
    }
    
    // 数据数组转为字符串格式,同时进行转议
    protected function values($value) {
    if (! get_magic_quotes_gpc ()) {
    $strValue = '';
    foreach ( $value as $v ) {
    $strValue .= "'" . addslashes ( $v ) . "',";
    }
    } else {
    foreach ( $value as $v ) {
    $strValue .= "'$v',";
    }
    }
    return rtrim ( $strValue, ',' );
    }
    
    // 获得结果集
    function sql($sql) {
    $result = $this->db->query($sql) or die($this->dbError());
    $resultArr = array();
    while(($row = $result->fetch_assoc())!=false){
    $resultArr[] = $row;
    }
    return $resultArr;
    }
    
    // 没有结果集的SQL
    function query($sql){
    $this->db->query($sql) or die($this->dbError());
    return $this->db->affected_rows;
    }
    
    // 返回错误
    function dbError(){
    return $this->db->error;
    }
    }
    ?>

以上是一个简单的PHP数据库处理类,就它的使用特地??乱幌拢?/p>

下面对以上代码中的部分相常量和变量作以说明:

    $mysqli:对当前数据库的链接引用
    $table:当前数据库的表名
    $opt:当前数据库的表的所有字段名
    DBFIX:数据库配置中的常量“表前缀”
    DBHOST:数据库主机
    DBFIX:数据库用户名
    DBPWD:数据库密码
    DBNAME:数据库名称

数据库处理类的使用方法
配置数据库处理类

在使用数据库处理类之前,你必须有一个相关的配置文件,下面我就写一个connect.php文件。文件内容如下所示:

 

 代码如下 复制代码
   <?php
    /**
    * Created by JetBrains PhpStorm.
    * User: YangLiu
    * Date: 2013-7-14
    * Time: 下午2:15
    * Description:数据库配置文件
    */
    define("DBHOST",'localhost'); //定义数据库服务器连接地址
    define("DBUSER",'root'); //数据库用户名
    define("DBPWD",''); //数据库密码
    define("DBNAME",'blog'); //定义数据库名
    define("DBFIX",'blog_'); //定义数据库表的前缀
    ?>

为了让您更简单的理解,我就没有建立更多的目录,把所有的文件全部放在同一目录。如果您觉得不好,也可以自行建立目录,并重新根据情况来调整文件位置。
数据库处理类的使用

使用数据库,你要先引用connect.php和db.class.php文件。下面举一个demo.php文件为例:

 代码如下 复制代码

    <?php
    /**
    * Created by JetBrains PhpStorm.
    * User: LiuYang
    * Date: 2013-9-15
    * Time: 下午10:39
    * Description:演示DEMO文件
    */
    include './config.php'; //加载配置文件
    include './page.class.php'; //加载数据库处理类
    
    $db = $db = new db('blog'); //链接数据库的表blog_blog
    
    ?>

输出数据库表的字段名

输出数据库表的字段名,用的tbFields方法。代码如下:

   

 代码如下 复制代码

$tbField = $db->tbFields();
    var_dump($tbField);

其输出结果如下:

array (size=5)
  0 => string 'id' (length=2)
  1 => string 'btitle' (length=6)
  2 => string 'content' (length=7)
  3 => string 'status' (length=6)
  4 => string 'cid' (length=3)

下面,再介绍一个数据库处理类中的相关的另一个方法:

    echo $db->field($tbFields);

最后的输出结果:`id`,`btitle`,`content`,`status`,`cid`
统计所有记录数

数据库类中还有一个方法,用来统计数据的所有条数count方法。在我们的分页处理中,它也就会显示得重要了。

  

 代码如下 复制代码
  echo $db->count('blog');

注意:以上代码是根据id来查阅。其中count方法代码如下:

   

 代码如下 复制代码
// 统计所有记录数
    function count($tabname=''){
    $tabname = $tabname==''?$this->table:$tabname;
    $sql = "SELECT `id` FROM {$tabname} {$this->opt['where']}";
    return $this->query($sql);
    }

数据库的增、删、改、查

数据库的相关操作无外乎就是增、删、改、查。下面对其作以简单介绍:
插入数据

insert方法向数据库中插入数据,其中传入的参数为一个数组,如array('btitle'=>'www.111cn.net','content'=>'小天地,大世界是一个技术交流博客')。其中数组的键名即为表的字段名,而键值即为想要插入的内容。请看下面的示例:

 代码如下 复制代码

    $inserArr = array('btitle'=>'www.111Cn.net','content'=>'小天地,大世界是一个技术交流博客');
    $db->insert($inserArr);

删除数据

delete方法是专门来删除数据。为了防止数据被误删,数据删除必须存在一定的限制。比如说通过where、limit方法来作一定的限制,或者你可以直接传入要删除数据的id。你可以查看下面的示例:

   

 代码如下 复制代码
//删除id为3的数据
    $db->delete(3);
    
    //删除id>5的数据
    $db->where('id>5')->delete();
    
    //删除从20起后的10条数据
    $db->where('id>5')->limit('20,10')->delete();

更新数据

数据添加了,有时发现错误,就得高法来更改数据。update方法用来更新数据。update方法与insert方法类似,都接受一个数组参数:数组的键名为表的字段名,对应的键值为要插入的内容。下面的内容就是把id为29的数据更新为array中的数据。

  

 代码如下 复制代码
  $db->where('id=29')->update(array('btitle'=>'www.111cn.net','content'=>'小天地,大世界是一个技术交流博客'));
    //更新id>35的所有数据
    $db->where('id>29')->update(array('btitle'=>'www.111cn.Net','content'=>'小天地,大世界是一个技术交流博客'));

查找数据

数据库处理类中提供了select方法,可以很方便的进行数据的查找。结合着where、limit方法,就可以查找相应的数据。具体的使用方法请见下例:

  

 代码如下 复制代码
  $db->select(); //查找所有数据
    
    $db->where('id=0')->select(); //查找指定数据
    
    $db->where('id>9')->select(); //查找id大于9的数据集合
    
    $db->limit('10,9')->select(); //从查找数据第10条以后的9条数据
    
    $db->where('id>50')->limit('10,9')->select();

其它方法

除了以上几种方法之外,数据库处理类还提供了如下的方法。

    order方法:主要是来更改查找数据排序方式
    group方法:数组方法
    find方法:查找单条记录
    sql方法:直接执行数据SQL语句,并返回处数据集
    query方法:也可以执行数据SQL语句,但不返回数据集,而是返回受影响的记录条数

关于数据库处理类

最后说明一点,此数据库处理类是后盾网PHP视频中所讲,有助于像我这样的新手(也就是我)来学习,故特地整理。

excel导入mysql数据库我整理了两种办法,一种就是使用PHP-ExcelReader来导入,另一种是把excel转换成csv文件直接使用php相关函数导入即可。

昨晚一个客户联系我做网站,提出的要求是需要把客户提供的excel文件里面的数据导入到mysql数据库,最常用的方法就是先把xls文件导出为csv格式的文件,然后在解析csv格式的文件导入到mysql数据库。方法比较冗余,而且分好几步进行,很不方便,断桥残雪今天介绍一种方法是直接跳过csv的中间环节,直接把excel文件导入mysql数据库。

首先我们需要下载PHP-ExcelReader这是一个开源的项目,主要是来解析excel的文件,下载地址:http://sourceforge.net/projects/phpexcelreader,下载之后解压,主要用到excel文件夹里面的两个文件reader.php和oleread.php(这个文件默认的是oleread.inc,不清楚为啥,一堆e文,没看,直接改名即可)。

在reader.php文件中找到以下类似代码(第一行既是),改成正确的oleread.php路径即可:require_once 'oleread.php';

然后新建一个php文件引入reader.php,代码如下:

 代码如下 复制代码

<?php
require_once 'Excel/reader.php';
$data = new Spreadsheet_Excel_Reader();
$data->setOutputEncoding('gbk');//此处设置编码,一般都是gbk模式

$data->read('Book1.xls');//文件路径111cn.net

error_reporting(E_ALL ^ E_NOTICE);
//这里我就只循环输出excel文件的内容了,要入库,只要把输出的地方,写一段mysql语句即可~
for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
 for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
  echo """.$data->sheets[0]['cells'][$i][$j]."",";
 }
 echo "n";
}
?>

注意:请不要使用PHP-ExcelReader压缩包里面的xls进行测试,断桥残雪发现,那个文件既是使用excel也打不开,所以是错误的。

断桥残雪使用上面的方法解析了一个1.4M的数据,都显示正常,所以大家可以放心使用

phpexcel比较费资源,不过并不是所有的excel都能读取 我们可以转换成csv来操作

首先确认你的数据库是什么编码的,以utf-8为例,
你首先打开excel 文件,然后保存,选择为另存为.csv文件。
然后用文本编辑器打开.csv文件,另存为utf-8的csv
然后你写php 可以使用php 的getcsv  打开(这样确保你有的字段中含有,而导致解析错误),然后把解析的结果导入到数据库中。


如果是csv格式的我就不必要这么麻烦了

 代码如下 复制代码


<?
//连接数据库文件 www.111cn.net
$connect=mysql_connect("localhost","admin","admin") or die("链接数据库失败!");
//连接数据库(test)
mysql_select_db("testcg",$connect) or die (mysql_error());

$temp=file("test.csv");//连接EXCEL文件,格式为了.csv
for ($i=0;$i <count($temp);$i++)
{
$string=explode(",",$temp[$i]);//通过循环得到EXCEL文件中每行记录的值
//将EXCEL文件中每行记录的值插入到数据库中
$q="insert into ceshi (name,num,dom) values('$string[0]','$string[1]','$string[2]');";
mysql_query($q) or die (mysql_error());

if (!mysql_error());
{
echo " 成功导入数据!";
}
echo $string[4]."n";
unset($string);
}
?>

php与mysql密码多半与php是没有任何关系了,这个我们只要把页面与mysql编码进行处理即可解决乱码问题,乱码也只是中文会乱码了。

使用PHP+MYSQL时遇到过字符乱问题,解决方法:

在mysql_connect后面加一句SET NAMES UTF8,即可使得UTF8的数据库消除乱码,对于GBK的数据库则使用SET NAMES GBK,代码如下:

 代码如下 复制代码

1 $mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass);
2 mysql_query("SET NAMES 'GBK'");

数据库字符集为utf-8

连接语句用这个
 

 代码如下 复制代码
1 mysql_query("SET NAMES 'UTF8'");
2 mysql_query("SET CHARACTER SET UTF8");
3 mysql_query("SET CHARACTER_SET_RESULTS=UTF8'");


下面是一些常见的错误情况与解决:

1、数据库采用UTF8编码,而页面申明编码是GB2312,这是最常见的产生乱码的原因。这时候在PHP脚本里面直接SELECT数据出来的就是乱码,需要在查询前先使用: mysql_query("SET NAMES GBK"); 来设定MYSQL连接编码,保证页面申明编码与这里设定的连接编码一致(GBK是GB2312的扩展)。如果页面是UTF-8编码的话,可以用: mysql_query("SET NAMES UTF8");
注意是UTF8而不是一般用的UTF-8。假如页面申明的编码与数据库内部编码一致可以不设定连接编码。

注:事实上MYSQL的数据输入输出比上面讲的更复杂一些,MYSQL配置文件my.ini中定义了2个默认编码,分别是[client]里的default -character-set和[mysqld]里的default-character-set来分别设定默认时候客户端连接和数据库内部所采用的编码。我们上面指定的编码其实是MYSQL客户端连接服务器时候的命令行参数character_set_client,来告诉MYSQL服务器接受到的客户端数据是什么编码的,而不是采用默认编码。

2、页面申明编码与文件本身编码不一致,这种情况很少发生,因为如果编码不一致美工做页面时候在浏览器看到的就是乱码了。更多时候是发布以后修改一些小BUG,以错误编码打开页面然后保存导致的。或者是用某些FTP软件直接在线修改文件,比如CuteFTP,由于软件编码配置错误而导致转换错了编码。

3、一些租用虚拟主机的朋友,明明上述3项编码都设置正确了还是有乱码。比方说网页是GB2312编码的,IE等浏览器打开却总是识别成UTF-8,网页HEAD里面已经申明是GB2312了,手动修改浏览器编码为GB2312 后页面显示正常。产生原因是服务器Apache设定了服务器全局的默认编码,在httpd.conf里面加了AddDefaultCharset UTF-8。这时候服务器会首先发送HTTP头给浏览器,其优先级比页面里申明编码高,自然浏览器就识别错了。解决办法有2个,请管理员在配置文件自己的虚机里加上一条AddDefaultCharset GB2312来覆盖全局配置,或者在自己目录的.htaccess里配置。

标签:[!--infotagslink--]

您可能感兴趣的文章: