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); |
读取mysql数据库
例。
代码如下 | 复制代码 |
<?php |
中文显示乱码问题
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。
其实简单的方法是通过phpMyAdmin来设置。
设置下面几项:
1: 语言设置为 chinese (zh-utf-8)
2: MySQL 字符集: UTF-8 Unicode (utf8)
3: MySQL 连接校对: utf8_general_ci
4: 新增数据库和数据表的时候,整理项选择 utf8_general_ci
通过以上设置,在phpMyAdmin中操作和查询的时候,中文字符都不会乱码了。
但是你会发现,在php程序中用以前的sql语句查询出来的结果还是乱码,问题就出在connection连接层上。
解决方法是在成功连接数据库之后,发送一句查询语句:
代码如下 | 复制代码 |
1: $this->LinkID = mysql_connect($this->Host, $this->User, $this->Password); DEFINE ('LINK', mysql_connect (DB_HOST, DB_USER, DB_PASSWORD)); |
gbk编码的
代码如下 | 复制代码 |
$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); |
phpMyAdmin 安装后,默认其高级功能是不开启的,所以一般登录到 phpMyAdmin 后,会提示“phpMyAdmin 高级功能尚未完全设置,部分功能未激活。请点击这里查看原因。”。而所谓的高级功能,其实就是存储 phpMyAdmin 的各种参数到数据库中。
要解决这个问题也不难,实际上根据 phpMyAdmin 的提示一步一步也能完成。这里简单记录一下过程。
第一步,在 phpMyAdmin 源码的 examples 目录下有个 create_tables.sql 文件,这就是创建名为 phpmyadmin 数据库的SQL文。当你用 root 用户登录 phpMyAdmin 后,在“导入”页面,上传这个 create_tables.sql 文件即可成功创建数据库phpmyadmin。
第二步,创建完数据库 phpmyadmin 后,展开左侧phpmyadmin,出现12张表名。
第三步,更改配置文件 (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视频,主要内容是相关制作一个博客系统,感觉还是很有收获。
简单的数据库处理类
下面是其中讲到的一个简单的数据库处理类,请见源码:
代码如下 | 复制代码 |
<?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 |
输出数据库表的字段名
输出数据库表的字段名,用的tbFields方法。代码如下:
代码如下 | 复制代码 |
$tbField = $db->tbFields(); 其输出结果如下: array (size=5) |
下面,再介绍一个数据库处理类中的相关的另一个方法:
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'=>'小天地,大世界是一个技术交流博客'); |
删除数据
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 $data->read('Book1.xls');//文件路径111cn.net error_reporting(E_ALL ^ E_NOTICE); |
注意:请不要使用PHP-ExcelReader压缩包里面的xls进行测试,断桥残雪发现,那个文件既是使用excel也打不开,所以是错误的。
断桥残雪使用上面的方法解析了一个1.4M的数据,都显示正常,所以大家可以放心使用
phpexcel比较费资源,不过并不是所有的excel都能读取 我们可以转换成csv来操作
首先确认你的数据库是什么编码的,以utf-8为例,
你首先打开excel 文件,然后保存,选择为另存为.csv文件。
然后用文本编辑器打开.csv文件,另存为utf-8的csv
然后你写php 可以使用php 的getcsv 打开(这样确保你有的字段中含有,而导致解析错误),然后把解析的结果导入到数据库中。
如果是csv格式的我就不必要这么麻烦了
代码如下 | 复制代码 |
$temp=file("test.csv");//连接EXCEL文件,格式为了.csv if (!mysql_error()); |
相关文章
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
- 某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- 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数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
- 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
Vue生命周期activated之返回上一页不重新请求数据操作
这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26