php查询mongodb数据库记录id号的例子

 更新时间:2016年11月25日 16:34  点击:1872
取MONGOID对象的ID字符串值其实就像mysql中返回数据记录的ID号了,这样的做法是非常的简单了,下面我们一起来看看。


使用GridFS传文件到MongoDB,会返回一个MongoId对象,通常我们需要把这个对象中的$id值以字符串形式保存到数据库中,作为取文件的标识,那么PHP如何取出MongoID对象的ID字符串值呢?

在php中通过_id 在mongodb中查找特定记录:

查询条件需要这样写:array("_id"=>new MongoId("$id"))


这个MongoId形如:

object(MongoId)#23 (1) {
  ["$id"] => string(24) "558a7dab988d4d10140058b1"
}

我们要用PHP取出[“$id”]的值,问题是这个键名是这种形式的,用$re->$id肯定不对,所以这样取值:

//存储上传的excel到MongoDB
public function saveToMongo($file){
 $id = $this->getGridFS()->storeFile($file);
 return $id->{'$id'};
}

这样就OK了。

预处理语句对于防止 MySQL 注入了,我们在mssql中通常会通过存储过程来进行过滤了,但在mysql与php中并不能样处理 ,下面我们一起来看看PHP MySQL 预处理语句学习笔记,希望例子能够对各位有帮助。


预处理语句及绑定参数

 

预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

 

预处理语句的工作原理如下:

 

预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)

数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出
执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

相比于直接执行SQL语句,预处理语句有两个主要优点:

预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)
绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句
预处理语句针对SQL注入是非常有用的,因为 参数值发送后使用不同的协议,保证了数据的合法性。
MySQLi 预处理语句

以下实例在 MySQLi 中使用了预处理语句,并绑定了相应的参数:

实例 (MySQLi 使用预处理语句)

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDB";

// 创建连接

$conn = new mysqli($servername, $username, $password, $dbname);

// 检测连接

if ($conn->connect_error) {

    die("Connection failed: " . $conn->connect_error);

}

// prepare and bind

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");

$stmt->bind_param("sss", $firstname, $lastname, $email);

// 设置参数并执行

$firstname = "John";

$lastname = "Doe";

$email = "john@example.com";

$stmt->execute();

$firstname = "Mary";

$lastname = "Moe";

$email = "mary@example.com";

$stmt->execute();

$firstname = "Julie";

$lastname = "Dooley";

$email = "julie@example.com";

$stmt->execute();

echo "New records created successfully";

$stmt->close();

$conn->close();

?>
解析以下实例的每行代码:
"INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)"

在 SQL 语句中,我们使用了问号 (?),在此我们可以将问号替换为整型,字符串,双精度浮点型和布尔值。
接下来,让我们来看下 bind_param() 函数:
$stmt->bind_param("sss", $firstname, $lastname, $email);
该函数绑定了 SQL 的参数,且告诉数据库参数的值。 "sss" 参数列处理其余参数的数据类型。s 字符告诉数据库该参数为字符串。


参数有以下四种类型:

 

i - integer(整型)
d - double(双精度浮点型)
s - string(字符串)
b - BLOB(布尔值)
每个参数都需要指定类型。
通过告诉数据库参数的数据类型,可以降低 SQL 注入的风险。
Note 注意: 如果你想插入其他数据(用户输入),对数据的验证是非常重要的。
PDO 中的预处理语句

以下实例我们在 PDO 中使用了预处理语句并绑定参数:


实例 (PDO 使用预处理语句)

<?php

$servername = "localhost";

$username = "username";

$password = "password";

$dbname = "myDBPDO";

try {

    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // 设置 PDO 错误模式为异常

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 预处理 SQL 并绑定参数

    $stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) 

    VALUES (:firstname, :lastname, :email)");

    $stmt->bindParam(':firstname', $firstname);

    $stmt->bindParam(':lastname', $lastname);

    $stmt->bindParam(':email', $email);

    // 插入行

    $firstname = "John";

    $lastname = "Doe";

    $email = "john@example.com";

    $stmt->execute();

    // 插入其他行

    $firstname = "Mary";

    $lastname = "Moe";

    $email = "mary@example.com";

    $stmt->execute();

    // 插入其他行

    $firstname = "Julie";

    $lastname = "Dooley";

    $email = "julie@example.com";

    $stmt->execute();

    echo "New records created successfully";

    }

catch(PDOException $e)

    {

    echo $sql . "<br>" . $e->getMessage();

    }

$conn = null;

?>

在php中连接mysql数据库有 mysql、mysqli、pdo三种方式了,但估计各位对于它们三个的连接与区别估计不是很理解了,下面一聚教程小编为各位介绍一下吧。


一、特性及对比

PHP的MySQL扩展是设计开发允许PHP应用与MySQL数据库交互的早期扩展。mysql扩展提供了一个面向过程 的接口,并且是针对MySQL4.1.3或更早版本设计的。因此,这个扩展虽然可以与MySQL4.1.3或更新的数据库服务端 进行交互,但并不支持后期MySQL服务端提供的一些特性。由于太过古老,又不安全,所以已被后来的mysqli完全取代。
PHP的mysqli扩展,我们有时称之为MySQL增强扩展,可以用于使用 MySQL4.1.3或更新版本中新的高级特性。其特点为:面向对象接口 、prepared语句支持、多语句执行支持、事务支持 、增强的调试能力、嵌入式服务支持 、预处理方式完全解决了sql注入的问题。不过其也有缺点, 就是只支持mysql数据库。如果你要是不操作其他的数据库,这无疑是最好的选择。
PDO是PHP Data Objects的缩写,其是PHP应用中的一个数据库抽象层规范。PDO提供了一个统一的API接口可以使得你的PHP应用不去关心具体要 连接的数据库服务器系统类型。也就是说,如果你使用PDO的API,可以在任何需要的时候无缝切换数据库服务器,比如从oracle 到MySQL,仅仅需要修改很少的PHP代码。其功能类似于JDBC、ODBC、DBI之类接口。同样,其也解决了sql注入问题,有很好的安全性。不过他也有缺点,某些多语句执行查询不支持(不过该情况很少)。

官文对于三者之间也做了列表性的比较: 


























































PHP的mysqli扩展
PDO (使用PDO MySQL驱动和MySQL Native驱动)PHP的mysql扩展
引入的PHP版本5.05.03.0之前
PHP5.x是否包含
MySQL开发状态活跃在PHP5.3中活跃仅维护
在MySQL新项目中的建议使用程度建议 - 首选建议不建议
API的字符集支持
服务端prepare语句的支持情况
客户端prepare语句的支持情况
存储过程支持情况
多语句执行支持情况大多数
是否支持所有MySQL4.1以上功能大多数

 

从官方给出的这份结果上来看,优先推荐msqli,其次是pdo 。而“民间”给出的结果很多是倾向于使用PDO,因为其不担有跨库的优点,更有读写速度快的特点。
51cto上的给出了相关的测试结果(有点老,2011年的测试结果)。
二、模块安装及调用
以ubuntu及其衍生版为例,通过sudo apt-get install mysqlnd 即可增加php对pdo和mysqli的支持(源码安装的可以选择phpize程序进行动态扩展)。具体可以通过phpinfo页面打开查看,其中在mysqlnd项下,可以看到如下内容:

API Extensions  mysql,mysqli,pdo_mysql

mysqli和PDO连接方法

// PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password');
// mysqli, 面向过程方式
$mysqli = mysqli_connect('localhost','username','password','database');
// mysqli, 面向对象
$mysqli = new mysqli('localhost','username','password','database');

mysqli通过配置文件进行查询的示例:

配置文件

yang@crunchbang:/var/www/t$ cat config.ini.php

查询代码

yang@crunchbang:/var/www/t$ cat mysqlquery.php
query("set names $charName");
    //3、处理结果
    $res= $mysqliObj->query($sql);
    //var_dump($res);
    //fetch_assoc \fetch_array \fetch_object
    while($row=$res->fetch_row()){
 //       print_r($row);
        foreach($row as $val){
            echo '--'.$val;
        }
        echo '                        '
    }
    //4、关闭资源
    $res->free();
    $mysqliObj->close();
?>        

pdo方式进行的查询

setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$r = $dbh->query('SELECT * FROM user');
var_dump($r);
foreach($r as $v) {
    var_dump($v);
}
?>

总结:
像discuz、phpcms、akcms等程序一般都会提供两种连接方式mysqli或pdo-mysql(前提是你的部署环境要支持),具体在使用到类以于以上的php程序时,可以根据自己的情况而定。

用过dedecms系统的朋友都会看到在后台的数据表管理中我们可以在后台看到表的数据表结构及字符长度了,下面我也整理了一个PHP生成MySQL数据字典 数据表结构例子,大家一起来看看。

程序代码如下

 代码如下 复制代码


<?php
/**
 * 生成mysql数据字典
 */
// 配置数据库
$database = array();
$database['DB_HOST'] = '127.0.0.1';
$database['DB_NAME'] = 'test';
$database['DB_USER'] = 'testuser';
$database['DB_PWD'] = '123456';


$mysql_conn = @mysql_connect("{$database['DB_HOST']}", "{$database['DB_USER']}", "{$database['DB_PWD']}") or die("Mysql connect is error.");
mysql_select_db($database['DB_NAME'], $mysql_conn);
$result = mysql_query('show tables', $mysql_conn);
mysql_query('SET NAME GBK', $mysql_conn);
// 取得所有表名
while ($row = mysql_fetch_array($result))
{
 $tables[]['TABLE_NAME'] = $row[0];
}
// 循环取得所有表的备注及表中列消息
foreach($tables as $k => $v)
{
 $sql = 'SELECT * FROM ';
 $sql .= 'INFORMATION_SCHEMA.TABLES ';
 $sql .= 'WHERE ';
 $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database['DB_NAME']}'";
 $table_result = mysql_query($sql, $mysql_conn);
 while ($t = mysql_fetch_array($table_result))
 {
  $tables[$k]['TABLE_COMMENT'] = $t['TABLE_COMMENT'];
 }
 $sql = 'SELECT * FROM ';
 $sql .= 'INFORMATION_SCHEMA.COLUMNS ';
 $sql .= 'WHERE ';
 $sql .= "table_name = '{$v['TABLE_NAME']}' AND table_schema = '{$database['DB_NAME']}'";

 $fields = array();
 $field_result = mysql_query($sql, $mysql_conn);
 while ($t = mysql_fetch_array($field_result))
 {
  $fields[] = $t;
 }
 $tables[$k]['COLUMN'] = $fields;
}
mysql_close($mysql_conn);

$html = '';
// 循环所有表
foreach($tables as $k => $v)
{
 $html .= '<table border="1" cellspacing="0" cellpadding="0" align="center">';
 $html .= '<caption>表名:' . $v['TABLE_NAME'] . ' ' . $v['TABLE_COMMENT'] . '</caption>';
 $html .= '<tbody><tr><th>字段名</th><th>数据类型</th><th>默认值</th><th>允许非空</th><th>自动递增</th><th>备注</th></tr>';
 $html .= '';

 foreach($v['COLUMN'] AS $f)
 {
  $html .= '<td class="c1">' . $f['COLUMN_NAME'] . '</td>';
  $html .= '<td class="c2">' . $f['COLUMN_TYPE'] . '</td>';
  $html .= '<td class="c3">' . $f['COLUMN_DEFAULT'] . '</td>';
  $html .= '<td class="c4">' . $f['IS_NULLABLE'] . '</td>';
  $html .= '<td class="c5">' . ($f['EXTRA'] == 'auto_increment'?'是':' ') . '</td>';
  $html .= '<td class="c6">' . $f['COLUMN_COMMENT'] . '</td>';
  $html .= '</tr>';
 }
 $html .= '</tbody></table></p>';
}
// 输出
echo '<html>
    <meta charset="utf-8">
    <title>自动生成数据字典</title>
    <style>
        body,td,th {font-family:"宋体"; font-size:12px;} 
  table,h1,p{width:960px;margin:0px auto;}
        table{border-collapse:collapse;border:1px solid #CCC;background:#efefef;} 
        table caption{text-align:left; background-color:#fff; line-height:2em; font-size:14px; font-weight:bold; } 
        table th{text-align:left; font-weight:bold;height:26px; line-height:26px; font-size:12px; border:1px solid #CCC;padding-left:5px;} 
        table td{height:20px; font-size:12px; border:1px solid #CCC;background-color:#fff;padding-left:5px;} 
        .c1{ width: 150px;} 
        .c2{ width: 150px;} 
        .c3{ width: 80px;} 
        .c4{ width: 100px;} 
        .c5{ width: 100px;} 
        .c6{ width: 300px;}
    </style>
    <body>';
echo '<h1 style="text-align:center;">数据字典</h1>';
echo '<p style="text-align:center;margin:20px auto;">生成时间:' . date('Y-m-d H:i:s') . '</p>';
echo $html;
echo '<p style="text-align:left;margin:20px auto;">总共:' . count($tables) . '个数据表</p>';
echo '</body></html>';

?>

111

 

PHPexcel是一款非常不错的excel表格操作php插件了,我们通常用它来生成excel文档或数据转换并导入到mysql数据库中,下面介绍的是PHPexcel生成复杂的报表表头类例子

以前一直有需求,能把Execl里面的数据导入数据库,并且把数据库里面的数据导出到Execl中。

 代码如下 复制代码

require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
 
class PHPExeclCore extends PHPExcel_IOFactory{
 
 
 public static function SummerCreateExecl($Head,$data)
 {
 self::SummerCreateExeclHead($Head,$data,"Excel2007");
 }
 
 public static function SummerReadExecl($dir)
 {
 if(!file_exists($dir))
 {
 echo "Execl Not Exist";
 }
 else
 {
 $PHPExeclObj = self::load($dir);
 
 $sheetCount = $PHPExeclObj->getSheetCount(); //得到Execl中包含的Sheet工作簿的数量
 
 for($i=0;$i<$sheetCount;$i++)
 {
 $ActiveSheet = $PHPExeclObj->getSheet($i);
 $highestRow = $ActiveSheet->getHighestRow(); // 取得总列数
 $allColumn = $ActiveSheet->getHighestColumn();
 
 //通过嵌套循环来读取sheet工作簿里面的内容
 for($Col='A';$Col<$allColumn;$Col++)
 {
 for($Row=1;$Row<$highestRow;$Row++)
 {
 $Data[$Col][$Row] = $ActiveSheet->getCell($Col.$Row)->getValue();
 }
 }
 
 }
 }
 
 return $Data;
 
 }
 
 
 /*
 * 将数据写入到数据表中
 * $Data Array 表示要插入进Execl数据
 * $RuleData Array 表示数据格式的规则数组
 * $i int 表示从第几行起的插入数据
 * **/
 
 public static function SummerInsertDateToExecl($sheet,$Head,$Data,$n=3,$RuleData=array())
 {
 
 
 $SimpleHead = self::getHead($Head);
 
 $row = $n;
 foreach($Data as $key=>$valueArr)
 {
 $m = 0;
 foreach($valueArr as $k=>$v)
 {
 $StartCol = PHPExcel_Cell::stringFromColumnIndex($m).$row;
 $sheet->getCell($StartCol)->setValue($v);
 
 $sheet->getStyle($StartCol)->getAlignment()->applyFromArray(
 array(
 'horizontal'=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
 'rotation' => 0,
 'wrap' => TRUE,
 )
 );
 
 
 if(isset($SimpleHead[$k]['col']))
 {
 $m = $m + $SimpleHead[$k]['col']-1;
 $endCol = PHPExcel_Cell::stringFromColumnIndex($m).$row;
 $sheet->mergeCells($StartCol.":".$endCol);
 }
 
 $m++;
 
 $type = false;
 
 if(isset($SimpleHead[$k]['type']))
 {
 $type = $SimpleHead[$k]['type'];
 $AllowArray = $SimpleHead[$k]['allowarray'];
 }
 
 //设置单元格的数据验证
 if($type)
 {
 switch ($type)
 {
 case 'list':
 self::setSelectionRange($sheet, $StartCol,$AllowArray);
 break;
 case 'range':
 self::setValueRange($sheet, $StartCol,$AllowArray);
 break;
 }
 }
 
 }
 $row ++ ;
 }
 
 }
 
 /*
 * 生成Execl单元格备注
 * $sheet 当前的工作簿对象
 * $Cell 需要设置属性的单元格
 * $content 备注内容
 * */
 private static function setComment($sheet,$Cell,$content)
 {
 $sheet->getComment($Cell)->setAuthor('4399om');
 $objCommentRichText = $sheet->getComment($Cell)->getText()->createTextRun('4399om:');
 $objCommentRichText->getFont()->setBold(true);
 $sheet->getComment($Cell)->getText()->createTextRun("\r\n");
 $sheet->getComment($Cell)->getText()->createTextRun($content);
 $sheet->getComment($Cell)->setWidth('100pt');
 $sheet->getComment($Cell)->setHeight('100pt');
 $sheet->getComment($Cell)->setMarginLeft('150pt');
 $sheet->getComment($Cell)->getFillColor()->setRGB('EEEEEE');
 }
 
 /*
 * 现在单元格的有效数据范围,暂时仅限于数字
 * $sheet 当前的工作簿对象
 * $Cell 需要设置属性的单元格
 * $ValueRange array 允许输入数组的访问
 */
 private static function setValueRange($sheet,$Cell,$ValueRange)
 {
 //设置单元格的的数据类型是数字,并且保留有效位数
 $sheet->getStyle($Cell)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
 
 $ValueRange = explode(",",$ValueRange);
 
 //开始数值有效访问设定
 $objValidation = $sheet->getCell($Cell)->getDataValidation();
 $objValidation->setType( PHPExcel_Cell_DataValidation:: TYPE_WHOLE );
 $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation:: STYLE_STOP );
 $objValidation->setAllowBlank(true);
 $objValidation->setShowInputMessage( true); //设置显示提示信息
 $objValidation->setShowErrorMessage( true); //设置显示错误信息
 $objValidation->setErrorTitle('输入错误'); //错误标题
 $objValidation->setError('请输入数据范围在从'.$ValueRange[0].'到'.$ValueRange[1].'之间的所有值'); //错误内容
 $objValidation->setPromptTitle('允许输入'); //设置提示标题
 $objValidation->setPrompt('请输入数据范围在从'.$ValueRange[0].'到'.$ValueRange[1].'之间的所有值'); //提示内容
 $objValidation->setFormula1($ValueRange['0']); //设置最大值
 $objValidation->setFormula2($ValueRange['1']); //设置最小值
 
 }
 
 
 private static function OutinputHeader($objWriter)
 {
 $fileName = str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME));
 header("Content-Type: application/force-download");
 header("Content-Type: application/octet-stream");
 header("Content-Type: application/download");
 header('Content-Disposition:inline;filename="'.$fileName.'"');
 header("Content-Transfer-Encoding: binary");
 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
 header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 header("Pragma: no-cache");
 $objWriter->save('php://output');
 exit;
 }
 
 //数据控制,设置单元格数据在一个可选方位类
 private static function setSelectionRange($sheet,$Cell,$rangeStr,$Title="数据类型")
 {
 
 $objValidation = $sheet->getCell($Cell)->getDataValidation();
 $objValidation -> setType(PHPExcel_Cell_DataValidation::TYPE_LIST)
 -> setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_STOP)
 -> setAllowBlank(true)
 -> setShowInputMessage(true)
 -> setShowErrorMessage(true)
 -> setShowDropDown(true)
 -> setErrorTitle('输入的值有误')
 -> setError('您输入的值不在下拉框列表内.')
 -> setPromptTitle('"'.$Title.'"')
 -> setFormula1('"'.$rangeStr.'"');
 }
 
 
 
 /*
 * 构建表头
 * */
 public static function RecursionCreateExecl($head,$data)
 {
 
 $PHPExecl = new PHPExcel();
 
 $objWriter = self::createWriter($PHPExecl, 'Excel2007');
 
 $PHPExecl->getProperties()->setCreator("4399om")
 ->setLastModifiedBy("Summer")
 ->setTitle("Office 2007 XLSX Test Document")
 ->setSubject("Office 2007 XLSX Test Document")
 ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
 ->setKeywords("office 2007 openxml php")
 ->setCategory("Test result file");
 
 $PHPExecl->setActiveSheetIndex(0);
 
 $sheet = $PHPExecl->getActiveSheet();
 
 self::HandleHeadToNode($sheet, $head,1,0,0);
 
 self::SummerInsertDateToExecl($sheet,$head,$data,4);
 
 self::OutinputHeader($objWriter);
 }
 
 private static function HandleHeadToNode($sheet,$Head,$beginRow,$col,$StartCol)
 {
 
 
 foreach($Head as $key=>$cells)
 {
 $row = $beginRow; //表示行
 
 $beginCol = PHPExcel_Cell::stringFromColumnIndex($col).$row;
 
 $sheet->getCell($beginCol)->setValue($cells['value']);
 
 //设置表格样式
 $sheet->getStyle($beginCol)->getAlignment()->applyFromArray(
 array(
 'horizontal'=> PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
 'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
 'rotation' => 0,
 'wrap' => TRUE,
 )
 );
 
 $sheet->getStyle($beginCol)->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_DARKGREEN);
 
 //设置单元格的宽度
 if(isset($cells['width']))
 {
 $Cell = $sheet->getColumnDimension(PHPExcel_Cell::stringFromColumnIndex($col));
 $Cell->setWidth($cells['width']);
 }
 
 //哥元素打上标记
 if(isset($cells['Content']))
 {
 self::setComment($sheet, $beginCol, $cells['Content']);
 }
 
 $merge = false; //合并单元格
 if(isset($cells['col']))
 {
 $col += $cells['col']-1;
 $merge = true;
 }
 
 if(isset($cells['row']))
 {
 $row += $cells['row']-1;
 $merge = true;
 }
 
 if($merge)
 {
 $endCol = PHPExcel_Cell::stringFromColumnIndex($col).$row;
 $sheet->mergeCells($beginCol.":".$endCol);
 }
 
 $row ++;
 $col ++;
 
 //表示有存在孩子节点
 if(isset($cells['children']) && is_array($cells['children'])){
 $cols = $StartCol;
 if(!self::IsExistChildren($cells['children']))
 {
 $cols = $col-2;
 $StartCol = $col;
 }
 
 self::HandleHeadToNode($sheet,$cells['children'],$row,$cols,$StartCol);
 }else{
 $StartCol = $col;
 }
 
 
 }
 
 }
 
 //判断自己的孩子节点中是否存在孙子节点
 private static function IsExistChildren($Data)
 {
 foreach($Data as $key=>$value)
 {
 if(isset($value['children']) && is_array($value['children']))
 {
 return true;
 }
 }
 return false;
 }
 
 
 //获取底层数据
 private static function getHead($Head,&$Node=array())
 {
 foreach($Head as $key=>$value)
 {
 if(isset($value['children']) && is_array($value['children']))
 {
 self::getHead($value['children'],$Node);
 }
 else
 {
 $Node[] = $value;
 }
 }
 
 return $Node;
 }
 
}
 
 
 
 
$Head = array(
 array('value'=>'姓名','col'=>2,'row'=>2,'width'=>20,'type'=>'list','allowarray'=>'PHP开发工程师,PHP开发'),
 array('value'=>'第一天','col'=>2,'row'=>1,'width'=>20,'Content'=>'2014-12-29号',
 'children'=>
 array(
 array('value'=>'上午','col'=>1,'width'=>20,'type'=>'range','allowarray'=>'10,100'),
 array('value'=>'下午','width'=>20),
 ),
 
 ),
 array('value'=>'第二天','col'=>2,'row'=>1,'width'=>20,
 'children'=>
 array(
 array('value'=>'上午','width'=>20),
 array('value'=>'下午','width'=>20),
 ),
 ),
);
 
 
$data = array(
 array('PHP开发工程师','12','吃饭1','睡觉1','起床刷牙2','吃饭睡觉2'),
 array('PHP开发工程师','25','吃饭1','睡觉1','起床刷牙2','吃饭睡觉2'),
 array('PHP开发工程师','50','吃饭1','睡觉1','起床刷牙2','吃饭睡觉2'),
 array('PHP开发工程师','99','吃饭1','睡觉1','起床刷牙2','吃饭睡觉2'),
 array('PHP开发工程师','10','吃饭1','睡觉1','起床刷牙2','吃饭睡觉2'),
 );
 
$Node = PHPExeclCore::RecursionCreateExecl($Head,$data);

PHPexcel生成复杂的报表表头类例子
[!--infotagslink--]

相关文章

  • PHP添加MongoDB扩展实例教程

    由于要使用mikoomi mongodb plugin插件,所以需要php对mongodb的扩展支持,默认通过源安装的php并没有mongodb的扩展支持,具体可以通过php -m|grep mongo 验证 。这里就结...2016-11-25
  • 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
  • Linux下PHP安装curl扩展支持https例子

    安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
  • 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
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • 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
  • 安装使用Mongoose配合Node.js操作MongoDB的基础教程

    这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下...2016-03-03
  • PHP连接公司内部服务器的MYSQL数据库的简单实例

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