php的慢速日志引起的Mysql2013错误原因分析

 更新时间:2016年11月25日 16:34  点击:1704
慢速日在mysql中非常的实用了我们通常要使用慢速日来进行性能优化与数据库错误分析了,下面我们来看一篇关于php的慢速日志引起的Mysql2013错误原因分析教程。

Description:
————
If mysql query is longer as request_slowlog_timeout, connection breaks.

Test script:

<?php
// request_slowlog_timeout = 10s  (at /etc/php5/fpm/php-fpm.conf)
 
// $mysqli =
// ...
$query = "SELECT SLEEP (15)";
 
$res = $mysqli->query($query);
if (!$res) {
    echo $mysqli->error; // Error Code: 2013. Lost connection to MySQL server during query
    exit;
}
Expected result:
—————-
connection must be preserved and the request should be executed

ODBC方式连接数据库在mssql中我们通常会用到到了就连小编最初使用的asp也是使用此模式来连接数据库进行查询了,今天我们一起来看一篇关于php5.6使用ODBC链接mssql(包括各版本)例子吧,具体的细节如下所示。

php5.3以后无法使用php自带的mssql函数链接mssql。

需要安装微软自带的php_sqlsrv,安装好后一直链接失败。

一、配置ODBC+系统DSN数据源

之后找到【ODBC数据源管理器】(【开始】→【控制面板】→【管理工具】→【数据源(ODBC)】),转到【系统DSN】中,点击【添加】

选择【SQL Server】  —- 【完成】

设置数据源名称【test】(这是你之后用PHP的odbc函数来连接时使用的DSN名称),点击【服务器】下拉框选择服务器(我是手动填写的localhost)

选择认证方式—【下一步】

勾选【更改默认的数据为】→点击下拉框,选择已经建好的数据库—【下一步】之后步骤保持默认设置即可。

点击【测试数据源】,如果返回“测试成功”。就可以了。


一、建立连接

1、odbc

首先,在php程序所在的服务器设置odbc。这里32位和64位操作系统有区别。32位的从控制面板中管理工具中的数据源(odbc)直接建立就可以了,64位的要运行C:\Windows\SysWOW64\odbcad32.exe

从这里面设置。注意:上面只的是数据库服务器为32为的,数据源设置服务器为32位和64位两种的情况。只要两个服务器建立的数据源位数一致就好。

下面是odbc建立连接代码。


$con = odbc_connect('odbc名称','用户名','密码');

2、连接mssql2000

 

$con = mssql_connect('数据库地址','用户名','密码');

3、连接mssql2008


$connectionInfo =  array("UID"=>用户名,"PWD"=>密码,"Database"=>"数据库名称");
$con = sqlsrv_connect( 数据库地址,$connectionInfo);


二、输入查询代码

这个都一样,可以直接写入,也可以从mssql中验证好后复制过来。简单点说就是把一个sql语句赋值给一个变量。

类似下面代码

 

$query = "SELECT top 12 * 数据库名称 order by id desc";

三、建立查询并取出数据

1、odbc

 

$result = odbc_do($con,$query);
while(odbc_fetch_row($result))
{
    $变量名称 = odbc_result($result, "字段名称");
}

2、连接mssql2000


$result = mssql_query($con, $query);
while($row =mssql_fetch_array($result))
{
    $变量名称 = $row["字段名称"];
}

3、连接mssql2008


$result = sqlsrv_query($con, $query);
while($row = sqlsrv_fetch_array($result))
{
    $变量名称 = $row["字段名称"];
}

在php5.3及以后的版本中不附带sqlsrv库了。所以要从微软这里下载。
二、测试页面

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Access DB Test</title>
</head>
<body>
<h1 align="center">Connect DB Test</h1>
<?php
//
// 数据库操作函数
//
function deleteAll($conn, $table)
{
$sql = 'DELETE FROM '.$table.' WHERE 1=1';
odbc_exec($conn, $sql);
}
function showAll($conn, $table)
{
$sql = 'SELECT id, bID, bName FROM '.$table;
$rs = odbc_do($conn, $sql);
print '<table border="1">';
print '<tr><td>'.odbc_field_name($rs, 1).'</td><td>'.odbc_field_name($rs, 2).'</td><td>'.odbc_field_name($rs, 3).'</td></tr>';
while(odbc_fetch_row($rs))
{
print '<tr>';
print '<td>'.odbc_result($rs, 'id').'</td>';
print '<td>'.odbc_result($rs, 'bID').'</td>';
print '<td>'.odbc_result($rs, 'bName').'</td>';
print '</tr>';
}
print '</table>';
}
function insertTestData($conn)
{
static $i = 0;
for($j = 0; $j < 10; $j++)
{
$insertSql = 'INSERT INTO book (bID, bName) VALUES (\'ISBN 7-5325-2480-'.$i.'\',\'测试'.$i++.'\')';
odbc_exec($conn, $insertSql);
}
}
function createTable($conn)
{
$tableRs = odbc_tables($conn, null, null, 'book', 'TABLE');
if(odbc_fetch_row($tableRs) )
{
return 'table already exists.';
}
$createSql =
('CREATE TABLE book'.
'('.
'id INT IDENTITY(1, 1) PRIMARY KEY,'.
'bID VARCHAR(30) NOT NULL,'.
'bName NVARCHAR(30) NOT NULL,'.
')'
);
odbc_do($conn, $createSql);
return 'table created!';
}
//
// 测试流程
//
print '<pre>connecting db....</pre>';
$conn = odbc_connect ("test" , "sa", "password", SQL_CUR_USE_ODBC ) or die('fail to connect db');
/**
 * 建表并显示结果
 */
print createTable($conn).'<br>';
print "Table is :<br>";
$tableRs = odbc_tables($conn, null, null, 'book', 'TABLE');
while(odbc_fetch_row($tableRs))
{
print odbc_result($tableRs, 'TABLE_NAME').'<br>';
}
/**
 * 插入测试数据
 */
insertTestData($conn);
print '<hr>插入的数据: <br>';
showAll($conn, 'book');
/**
 * 删除数据
 */
deleteAll($conn, 'book');
print '删除所有数据之后: <br>';
showAll($conn, 'book');
/**
 * 关闭数据连接
 */
odbc_close ( $conn );
?>
</body>
</html>

关闭连接

这个没有什么区别,分别是odbc_close();和mssql_close()和sqlsrv_close();

好了上面的命令就是我们给各位整理的了哦,希望文章能够帮助到各位。

Excel如果我们自己要写处理函数是有点难了,但有excel处理插件了今天我们就一起来看一个PHP处理Excel数据表类吧,非常的实用希望对各位有帮助.

一、PHP导入Excel

使用PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader

举例:

<?php
require_once 'Excel/reader.php';

// ExcelFile($filename, $encoding);
$data = new Spreadsheet_Excel_Reader();

// Set output Encoding.
$data->setOutputEncoding('utf8');

$data->read(' wjztest.xls');


error_reporting(E_ALL ^ E_NOTICE);

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导入Excel**

推荐PHPExcel,官方网站: http://www.codeplex.com/PHPExcel
导入导出都成,可以导出office2007格式,同时兼容2003。
下载下来的包中有文档和例子,大家可以自行研究。

抄段例子出来:

http://www.codeplex.com/PHPExcel
<?php
ini_set("display_errors",1);//是否显示报错信息
ini_set('include_path', ini_get('include_path').';D:\\PHP\\PHPExcel 1.6.6\\Tests\\classes\\');//设置此页面包含路径

include "classes/PHPExcel.php";
include "classes/PHPExcel/Writer/Excel5.php";

//创建一个excel
$objPHPExcel = new PHPExcel();
$objWriter = new PHPExcel_Writer_Excel5($objPHPExcel);

$objWriter->save("xxx.xls");
?>
<?
//设置PHPExcel类库的include path
set_include_path('.'. PATH_SEPARATOR .'D:\workspace\biznaligy_eh\dev_src\includes\PHPExcel' . PATH_SEPARATOR . get_include_path());
   
 
   require_once 'PHPExcel.php';
   require_once 'PHPExcel/Writer/Excel5.php';     // 用于其他低版本xls

   require_once 'PHPExcel/Writer/Excel2007.php'; // 用于 excel-2007 格式

// 创建一个处理对象实例
   $objExcel = new PHPExcel();

// 创建文件格式写入对象实例, uncomment
   $objWriter = new PHPExcel_Writer_Excel5($objExcel);     // 用于其他版本格式
   //or
//$objWriter = new PHPExcel_Writer_Excel2007($objExcel); // 用于 2007 格式
//$objWriter->setOffice2003Compatibility(true);


//设置文档基本属性
   $objProps = $objExcel->getProperties();
   $objProps->setCreator("Zeal Li");
   $objProps->setLastModifiedBy("Zeal Li");
   $objProps->setTitle("Office XLS Test Document");
    $objProps->setSubject("Office XLS Test Document, Demo");
   $objProps->setDescription("Test document, generated by PHPExcel.");
   $objProps->setKeywords("office excel PHPExcel");
    $objProps->setCategory("Test");
   //设置当前的sheet索引,用于后续的内容操作。
//一般只有在使用多个sheet的时候才需要显示调用。
//缺省情况下,PHPExcel会自动创建第一个sheet被设置SheetIndex=0
   $objExcel->setActiveSheetIndex(0);

    $objActSheet = $objExcel->getActiveSheet();

//设置当前活动sheet的名称
    $objActSheet->setTitle('测试Sheet');


//设置单元格内容

//由PHPExcel根据传入内容自动判断单元格内容类型
    $objActSheet->setCellValue('A1', '字符串内容'); // 字符串内容
    $objActSheet->setCellValue('A2', 26);            // 数值
    $objActSheet->setCellValue('A3', true);          // 布尔值
    $objActSheet->setCellValue('A4', '=SUM(A2:A2)'); // 公式

//显式指定内容类型
   $objActSheet->setCellValueExplicit('A5', '847475847857487584', PHPExcel_Cell_DataType::TYPE_STRING);

   //合并单元格
    $objActSheet->mergeCells('B1:C22');

   //分离单元格
    $objActSheet->unmergeCells('B1:C22');
  
//设置单元格样式

   //设置宽度
   $objActSheet->getColumnDimension('B')->setAutoSize(true);
   $objActSheet->getColumnDimension('A')->setWidth(30);

    $objStyleA5 = $objActSheet->getStyle('A5');
  
//设置单元格内容的数字格式。

//如果使用了 PHPExcel_Writer_Excel5 来生成内容的话,
//这里需要注意,在 PHPExcel_Style_NumberFormat 类的 const 变量定义的
//各种自定义格式化方式中,其它类型都可以正常使用,但当setFormatCode
   //为 FORMAT_NUMBER 的时候,实际出来的效果被没有把格式设置为"0"。需要
   //修改 PHPExcel_Writer_Excel5_Format 类源代码中的 getXf($style) 方法,
//在 if ($this->_BIFF_version == 0x0500) { (第363行附近)前面增加一
   //行代码:
//if($ifmt === '0') $ifmt = 1;

//设置格式为PHPExcel_Style_NumberFormat::FORMAT_NUMBER,避免某些大数字
//被使用科学记数方式显示,配合下面的 setAutoSize 方法可以让每一行的内容
   //都按原始内容全部显示出来。
   $objStyleA5 ->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER);

//设置字体
    $objFontA5 = $objStyleA5->getFont();
    $objFontA5->setName('Courier New');
    $objFontA5->setSize(10);
    $objFontA5->setBold(true);
    $objFontA5->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
    $objFontA5->getColor()->setARGB('FF999999');

//设置对齐方式
    $objAlignA5 = $objStyleA5->getAlignment();
    $objAlignA5->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
    $objAlignA5->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);

//设置边框
   $objBorderA5 = $objStyleA5->getBorders();
   $objBorderA5->getTop()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
   $objBorderA5->getTop()->getColor()->setARGB('FFFF0000'); // color
   $objBorderA5->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
   $objBorderA5->getLeft()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
   $objBorderA5->getRight()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);

//设置填充颜色
   $objFillA5 = $objStyleA5->getFill();
   $objFillA5->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
   $objFillA5->getStartColor()->setARGB('FFEEEEEE');

//从指定的单元格复制样式信息.
    $objActSheet->duplicateStyle($objStyleA5, 'B1:C22');

//添加图片
   $objDrawing = new PHPExcel_Worksheet_Drawing();
   $objDrawing->setName('ZealImg');
   $objDrawing->setDescription('Image inserted by Zeal');
   $objDrawing->setPath('./zeali.net.logo.gif');
   $objDrawing->setHeight(36);
   $objDrawing->setCoordinates('C23');
   $objDrawing->setOffsetX(10);
   $objDrawing->setRotation(15);
   $objDrawing->getShadow()->setVisible(true);
   $objDrawing->getShadow()->setDirection(36);
   $objDrawing->setWorksheet($objActSheet);

//添加一个新的worksheet
   $objExcel->createSheet();
   $objExcel->getSheet(1)->setTitle('测试2');

//保护单元格
   $objExcel->getSheet(1)->getProtection()->setSheet(true);
   $objExcel->getSheet(1)->protectCells('A1:C22', 'PHPExcel');

//输出内容

   $outputFileName = "output.xls";
//到文件
////$objWriter->save($outputFileName);
//or
//到浏览器
   header("Content-Type: application/force-download");
   header("Content-Type: application/octet-stream");
   header("Content-Type: application/download");
   header('Content-Disposition:inline;filename="'.$outputFileName.'"');
   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');
?>

本文章来为各位介绍一篇关于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
基本上可以通用,我们只要稍微修改就可以用到其他任意的普通项目表添加中。

[!--infotagslink--]

相关文章

  • Ecshop提示Only variables should be passed by reference in错误

    在安装好ecshop软件之后我们打开首页时提示Only variables should be passed by reference in错误了,碰到这个问题是什么原因呢?下面我们就一起来看看解决办法吧。...2016-11-25
  • 409错误是什么 http 409错误怎么解决

    409错误是什么?http 409错误怎么解决呢?不少站长在遇到这个错误代码之后都一筹莫展,本次一聚教程网为大家带来了详细的说明,快来看看吧。 409错误是什么: HTTP 40...2017-01-22
  • 414错误是什么 414错误怎么解决

    414错误是HTTP协议状态码中的一种,很多都还不知道414错误是什么,以及不知道怎么解决414错误,那么就来看看小编带来的介绍吧。 414错误是什么: HTTP 414错误,(Requ...2017-01-22
  • http 405错误是什么 http 405错误怎么解决

    http 405错误是什么?http 405错误怎么解决?相信很多站长都在找这两个问题的答案,本次小编为大家带来了详细的教程,快来看看吧。 405错误是什么: HTTP 405错误是H...2017-01-22
  • 401错误码代表什么 401错误解决办法

    401是HTTP状态码的一种,属于“请示错误”,表示请求可能出错,已妨碍了服务器对请求的处理。具体的401错误是指:未授权,请求要求进行身份验证。登录后,服务器可能会返回对页面...2017-01-22
  • http 402错误是什么 http 402简介

    http 402错误是什么?402错误较为少见,一般不轻易出现,下面小编就来告诉大家402错误是什么吧。 HTTP 402错误是HTTP状态码的一种,表示“要求付费”; 所求的...2017-01-22
  • 411错误是什么 411错误怎么解决

    411错误是HTTP协议状态码的一种,很多人都还不知道411错误是什么,本次一聚教程网将为大家进行解答,并且告诉大家411错误怎么解决。 411错误是什么: HTTP 411错误,(Lengt...2017-01-22
  • 404错误是什么 404错误怎么解决

    403错误是网站访问过程中,常见的错误提示。资源不可用,服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致,比如IIS或者apache设置了访问权限...2017-01-22
  • apache网站提示503错误解决办法

    Apache status 503 的原因大致有如下几种情况 : 1、 CPU 负载过高,服务器响应不过来,返回503 2、 系统连接数超限,超过MaxVhostClients的上限,返回503 3、 单IP连接数超限,超过M...2016-01-28
  • 403错误是什么 403错误怎么解决

    403错误是HTTP状态码的一种,属于“请示错误”,表示服务器拒绝请求。如果在搜索引擎尝试抓取您网站上的有效网页时显示此状态代码,那么,这可能是您的服务器或主机拒绝搜索...2017-01-22
  • 412错误是什么 412错误怎么解决

    412错误是什么?412错误怎么解决?本次一聚教程网将为大家带来详细的介绍,帮助大家全面了解412错误的意思以及解决412错误的方法。 412错误是什么: HTTP 412错误,(Precond...2017-01-22
  • HTTP 408错误是什么 HTTP 408错误解决方法

    相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
  • 406错误是什么 406错误怎么解决

    HTTP 406错误是HTTP协议状态码的一种,表示无法使用请求的内容特性来响应请求的网页。一般是指客户端浏览器不接受所请求页面的 MIME 类型。 而MIME类型是在把输出...2017-01-22
  • 407错误是什么 407错误怎么解决

    407错误是什么?407错误怎么解决?不少站长都遇到过407错误,下面小编将告诉大家如何处理407错误。 407错误是什么: HTTP 407错误是HTTP协议状态码的一种,表示需要代...2017-01-22
  • 410错误是什么 http 410错误怎么解决

    410错误是HTTP协议状态码的一种,本次一聚教程网将为大家详细介绍HTTP 410错误是什么,以及410错误的解决办法。 410错误是什么: HTTP 410错误是HTTP协议状态码的...2017-01-22
  • HTTP 400错误是什么 HTTP 400错误怎么解决

    每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误,那么HTTP 400错误怎么解决呢?请看下文介绍。 目前400错...2017-01-22
  • PHP Fatal error: Cannot use object of type stdClass as array in错误

    下面一起来看看在php开发中碰到PHP Fatal error: Cannot use object of type stdClass as array in错误问题的解决办法吧。 普通的数组出现如下错误 代码...2016-11-25
  • Laravel 调试工具 laravel-debugbar 打印日志消息

    laravel-debugbar 调试工具的教程小编整理了几篇不错的教程,今天我们来看一篇Laravel 调试工具 laravel-debugbar 打印日志消息例子,希望文章对各位有帮助。 其实不...2016-11-25
  • PHP Curl出现403错误的解决办法

    自己用的小PHP应用,使用curl抓网页下来处理,为了穿墙方便,使用Privoxy作为代理,便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题,访问google baidu这些网站居然都返回403错误,而访问其他的一些网站没事,如果...2014-05-31
  • C#新手常犯的错误汇总

    这篇文章主要介绍了C#新手常犯的错误汇总,对于经验丰富的C#程序员同样具有很好的参考借鉴价值,需要的朋友可以参考下...2020-06-25