PHP中mysqli_affected_rows作用行数返回值
mysqli中关于update操作影响的行数可以有两种返回形式:
1. 返回匹配的行数
2. 返回影响的行数
默认情况下mysqli_affected_rows返回的值为影响的行数,如果我们需要返回匹配的行数,可以使用mysqli_real_connect函数进行数据库连接的初始化,并在函数的flag参数位加上:
MYSQLI_CLIENT_FOUND_ROWS return number of matched rows, not the number of affected rows
普通格式:
int mysqli_affected_rows ( mysqli link )
oop格式:
class mysqli {
int affected_rows
}
看下例子:
普通模式
代码如下 | 复制代码 |
<?php if (!$link) { /* Insert rows */ mysqli_query($link, "ALTER TABLE Language ADD Status int default 0″); /* update rows */ /* delete rows */ /* select all rows */ mysqli_free_result($result); /* Delete table Language */ /* close connection */ |
oop模式
代码如下 | 复制代码 |
<?php /* check connection */ /* Insert rows */ $mysqli->query("ALTER TABLE Language ADD Status int default 0″); /* update rows */ /* delete rows */ /* select all rows */ $result->close(); /* Delete table Language */ /* close connection */ |
最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法:
1、首先在cofig/main.php中添加对PHPExcel的引用,我的方式是这样:
代码如下 | 复制代码 |
// autoloading model and component classes 'import'=>array( /*'application.modules.srbac.controllers.SBaseController',*/ 'application.models.*', 'application.components.*', 'application.extensions.phpexcel.*', ), |
2、当然要记得将PHPExcel整个目录复制到项目的 "protected/extensions/" 目录下面。
3、按照下面的代码修改PHPExcel代码目录里的Autoloader.php文件:
代码如下 | 复制代码 |
public static function Register() { /*if (function_exists('__autoload')) { // Register any existing autoloader function with SPL, so we don't get any clashes spl_autoload_register('__autoload'); } // Register ourselves with SPL return spl_autoload_register(array('PHPExcel_Autoloader', 'Load'));*/ $functions = spl_autoload_functions(); foreach ( $functions as $function) spl_autoload_unregister($function); $functions = array_merge(array(array('PHPExcel_Autoloader','Load')),$functions); foreach ( $functions as $function) $x = spl_autoload_register($function); return $x; } // function Register() |
上面的函数中,注释掉的是原有的代码。
4、下面的代码是输出Excel,以及一些常用的属性设置,在你的Controller中:
代码如下 | 复制代码 |
$objectPHPExcel = new PHPExcel(); |
有面向对象技术基础的编程人员看一天就可以写起来了。而PHP在访问数据库的时候又经常会出现各种问题,如字符编码问题、SQL语法错误问题、PHP处理数据记录对象和返回对象的问题等。我这里写了一个数据库操作类,封装了数据库增删添改等操作,很方便使用。用这个类,可以加速网站的后台开发。
优点:
1.方便快捷, 数据库操作只需调用接口;
2.统一编码(utf8),不易导致乱码
3.结构清晰. 如处理前端请求的后台程序(test.php) + 表封装类(user.class.php) + 数据库封装类(db.class.php) + 配置信息(configuration.php)
以下例子有四个文件: configuration.php + db.class.php + user.class.php + test.php,放在同一个目录下。
首先是一个数据库配置的文件类configuration.php
代码如下 | 复制代码 |
?> |
接下来就是数据库操作类db.class.php
代码如下 | 复制代码 |
<?php require_once("./configuration.php"); //引入配置常量文件 date_default_timezone_set(TIMEZONE); /** * 类名:DB * 说明:数据库操作类 */ class DB { public $host; //服务器 public $username; //数据库用户名 public $password; //数据密码 public $dbname; //数据库名 public $conn; //数据库连接变量 /** * DB类构造函数 */ public function DB($host=DB_HOST ,$username=DB_USER,$password=DB_PASSWORD,$dbname=DB_NAME) { $this->host = $host; $this->username = $username; $this->password = $password; $this->dbname = $dbname; } /** * 打开数据库连接 */ public function open() { $this->conn = mysql_connect($this->host,$this->username,$this->password); mysql_select_db($this->dbname); mysql_query("SET CHARACTER SET utf8"); } /** * 关闭数据连接 */ public function close() { mysql_close($this->conn); } /** * 通过sql语句获取数据 * @return: array() */ public function getObjListBySql($sql) { $this->open(); $rs = mysql_query($sql,$this->conn); $objList = array(); while($obj = mysql_fetch_object($rs)) { if($obj) { $objList[] = $obj; } } $this->close(); return $objList; } /** * 向数据库表中插入数据 * @param:$table,表名 * @param:$columns,包含表中所有字段名的数组。默认空数组,则是全部有序字段名 * @param:$values,包含对应所有字段的属性值的数组 */ public function insertData($table,$columns=array(),$values=array()) { $sql = 'insert into '.$table .'( '; for($i = 0; $i < sizeof($columns);$i ++) { $sql .= $columns[$i]; if($i < sizeof($columns) - 1) { $sql .= ','; } } $sql .= ') values ( '; for($i = 0; $i < sizeof($values);$i ++) { $sql .= "'".$values[$i]."'"; if($i < sizeof($values) - 1) { $sql .= ','; } } $sql .= ' )'; $this->open(); mysql_query($sql,$this->conn); $id = mysql_insert_id($this->conn); $this->close(); return $id; } /** * 通过表中的某一属性获取数据 */ public function getDataByAtr($tableName,$atrName,$atrValue){ @$data = $this->getObjListBySql("SELECT * FROM ".$tableName." WHERE $atrName = '$atrValue'"); if(count($data)!=0)return $data; return NULL; } /** * 通过表中的"id",删除记录 */ public function delete($tableName,$atrName,$atrValue){ $this->open(); $deleteResult = false; if(mysql_query("DELETE FROM ".$tableName." WHERE $atrName = '$atrValue'")) $deleteResult = true; $this->close(); if($deleteResult) return true; else return false; } /** * 更新表中的属性值 */ public function updateParamById($tableName,$atrName,$atrValue,$key,$value){ $db = new DB(); $db->open(); if(mysql_query("UPDATE ".$tableName." SET $key = '$value' WHERE $atrName = '$atrValue' ")){ //$key不要单引号 $db->close(); return true; } else{ $db->close(); return false; } } /* * @description: 取得一个table的所有属性名 * @param: $tbName 表名 * @return:字符串数组 */ public function fieldName($tbName){ $resultName=array(); $i=0; $this->open(); $result = mysql_query("SELECT * FROM $tbName"); while ($property = mysql_fetch_field($result)){ $resultName[$i++]=$property->name; } $this->close(); return $resultName; } } ?> |
接下来是测试了。我在phpmyadmin中建了一个test0数据库,里面建一张表user。然后用php写一个user类对应数据库中的user表。
user.class.php
代码如下 | 复制代码 |
<?php require_once("./db.class.php"); public function insert(){ public static function getAllUser(){ |
测试程序: test.php
代码如下 | 复制代码 |
<?php require_once("./user.class.php"); $user = new User("HelloWorld","123456"); $users = User::getAllUser(); foreach ($users as $u) { |
很多网站都有导出数据为excel的功能,最开始想用js导出但是网上的文章几乎都一样而且浏览器兼容性还有问题,总之不太好用,那只好用php导出了服务器端处理不存在浏览器兼容的问题。
上图是项目中要要导出的数据,前两行是thead,后面是tbody(里面的tr数量不定)。首先是获取数据发送到php端处理。
代码如下 | 复制代码 |
require_once '../Classes/PHPExcel.php'; $objPHPExcel->setActiveSheetIndex(0); // 列宽 // 行高 $objPHPExcel->getActiveSheet()->setCellValue('A2', '姓名'); $objPHPExcel->getActiveSheet()->setCellValue('B2', '[姓名]'); // 为excel加图片 $objPHPExcel->getActiveSheet()->setCellValue('A17', '其它要求'); $objPHPExcel->getActiveSheet()->getStyle('A17')->getFont()->setBold(true); // 加粗 $objPHPExcel->setActiveSheetIndex(0); $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5'); $objWriter->save('PHPExcel.xls'); |
以工作的第一步就是要将数据从excel中取出来。这里我使用到了一个开源php处理excel类:phpexcel. 该项目的详细信息 http://phpexcel.codeplex.com/ 。
我目前使用的是phpexcel1.7.3版本, 解压缩后里面有一个PHPExcel和PHPExcel.php文件。
我们主要使用那个PHP文件。见下图文件目录结构
这个版本据说是可以支持excel2007,但是我使用2007编辑的xlsx是无法获得该库的支持。于是乎我就将它转化为2003。感觉支持地很好。
下面介绍一下具体的使用:
代码如下 | 复制代码 |
|
上面的主要功能是初始化相关的excel类,并装载excel第一个sheet
代码如下 | 复制代码 |
|
以上分别获得该表格的最大列值(字母表示如:‘G'),和最大的行数(数值表示)
下面将使用循环来讲excel里面的数据读到excel中:
代码如下 | 复制代码 |
|
下面简单地介绍一下phpexcel的写操作,这个操作经常用于将数据库中的数据导入到excel中,便于展示和做成更美观的效果。
代码如下 | 复制代码 |
$file_name = "output.xls"; |
用于将mysql数据用php导出到excel文件中,也许可以作为速成材料:
<?php
function to_excel($sql,$excel_name)//含参数为SQL语句、导出的excel文件名
{
include_once('PHPExcel/Classes/PHPExcel.php');//包含类文件
include_once('PHPExcel/Classes/PHPExcel/Writer/Excel2007.php');//包含类文件
$objPHPExcel=new PHPExcel();//新建一个excel文件类
$re=mysql_query($sql);//执行SQL得到数据集
$i=1;
while($list=mysql_fetch_row($re))//循环一行行获取数据
{
$objPHPExcel->getActiveSheet()->setCellValue('A'.$i,$list[0]);//excel的第A列第i行写入$list[0]
$objPHPExcel->getActiveSheet()->setCellValue('B'.$i,$list[1]);//依次类推
$objPHPExcel->getActiveSheet()->setCellValue('C'.$i,$list[2]);
$objPHPExcel->getActiveSheet()->setCellValue('D'.$i,$list[3]);
$objPHPExcel->getActiveSheet()->setCellValue('E'.$i,$list[4]);
$objPHPExcel->getActiveSheet()->setCellValue('F'.$i,$list[5]);
$objPHPExcel->getActiveSheet()->setCellValue('G'.$i,$list[6]);
$objPHPExcel->getActiveSheet()->setCellValue('H'.$i,$list[7]);
$objPHPExcel->getActiveSheet()->setCellValue('I'.$i,$list[8]);
$i++;
}
$objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);//将excel数据对象实例化为excel文件对象
$objWriter->save($excel_name.".xlsx");//导出并写入当前目录,按照$excel_name命名
echo "OK!已导出为".$excel_name;
}
?>
相关文章
- 这篇文章主要介绍了mybatis-plus 返回部分字段的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-02
SQLMAP结合Meterpreter实现注入渗透返回shell
sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
- 刚来公司上班的时候,看到以前的程序员写的程序里面调用http地址是,不是用http而是用双斜杠//开头,刚开始不知道这样写有什么好处,虽然能够正常浏览,后来在网上找了资料,才发...2016-09-20
- 这篇文章主要介绍了Feign接口方法返回值设置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-08
- 这篇文章主要介绍了nestjs返回给前端数据格式的封装实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-22
- 测试代码如下:复制代码 代码如下:<?php$fp=fopen("http://www.sina.com.cn", 'r');$stream_meta = stream_get_meta_data($fp);print_r($stream_meta);?>在我本机输出如下:Array( [wrapper_data] => Array...2013-10-04
- 这篇文章主要介绍了Mybatis返回结果封装map过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 这篇文章主要介绍了解决微信授权成功后点击按返回键出现空白页和报错的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-08
- C#中方括号[]可用于数组,索引、属性,更重要的是用于外部DLL类库的引用。...2020-06-25
- 本文主要介绍了Vue3中key的作用和工作原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-10-13
- 这篇文章主要给大家介绍了关于Vue实现返回顶部按钮的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-21
- 这篇文章主要介绍了Postman动态获取返回值过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-30
- PHP是现在很多程序比较常用的软件,一些人在写php代码时候,会遇到需要返回值的情况。这里可以统一设置下返回值格式,下面文章就给大家介绍返回值设置实例,下面一起来看看。...2017-07-06
解析Mybatis的insert方法返回数字-2147482646的解决
这篇文章主要介绍了解析Mybatis的insert方法返回数字-2147482646的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-02Night Shift是什么意思 Night Shift有什么功能及作用?
Night Shift是IOS9.3正式版系统新增加的功能之一,很多伙伴们都不清楚Night Shift是什么意思?以及Night Shift有什么用途?对此,本文小编就为大家详细介绍Night Shift的含义及作用...2016-07-04- ps软件是非常受大家喜欢的,有着非常不错的功能。这次文章就给大家介绍下ps高斯模糊在哪?ps高斯模糊有什么作用?感兴趣的下面一起来看看。 高斯模糊就是滤镜选项中,【...2017-07-06
- 这篇文章主要给大家介绍了关于C#异步方法返回void与Task的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-04
- 在做一个百度404错误自动提交文件时发现里面的换行不生效了,那么在PHP fwrite换行写入时换行符不起作用时我们要如何来自呢,具体的来看看吧。 php的换行符我们都知...2016-11-25
- 我知道我们可以用 public 中的值,把private中的数据给提出来,但是还是搞不懂private该怎么用,或者说在一个具体程序中,private有什么用...2020-08-20