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();
好了上面的命令就是我们给各位整理的了哦,希望文章能够帮助到各位。
慢速日在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
一、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语言已经有计划好几年,但都忙于一些事情没有静心尝试,鉴于项目的需要,必须要学点技术,所以准备把前端、前端框架以及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
基本上可以通用,我们只要稍微修改就可以用到其他任意的普通项目表添加中。
代码如下 | 复制代码 |
$mysql_server="localhost";
$mysql_username="数据库用户名"; $mysql_password="数据库密码"; $mysql_database="数据库名"; //建立数据库链接 $conn = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die("数据库链接错误"); //选择某个数据库 mysql_select_db($mysql_database,$conn); mysql_query("set names 'utf8'"); //执行MySQL语句 $result=mysql_query("SELECT id,name FROM 数据库表"); //提取数据 $row=mysql_fetch_row($result); |
代码如下 | 复制代码 |
$db=new mysqli($dbhost,$username,$userpass,$dbdatabase);
if(mysqli_connect_error()){ echo 'Could not connect to database.'; exit; } $result=$db->query("SELECT id,name FROM user");
$row=$result->fetch_row(); |
代码如下 | 复制代码 |
$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';'
$dbh=new PDO($dsn,$username,$userpass); $stmt=$dbh->query('SELECT id,name FROM user');
$row=$stmt->fetch(); |
相关文章
- 安装curl扩展支持https是非常的重要现在许多的网站都使用了https了,下面我们来看一篇关于PHP安装curl扩展支持https例子吧。 问题: 线上运行的lamp服务器,默认yu...2016-11-25
- floor会产生小数了如果我们不希望有小数我们是可以去除小数点的了,下面一聚教程小编来为各位介绍php使用floor去掉小数点的例子,希望对各位有帮助。 float floor (...2016-11-25
- 下面我们来看一篇关于纯Css实现下拉菜单的简单例子,希望这篇文章能够给各位同学带来帮助,具体步骤如下. 大家可能会经常用到hover这属性,用hover实现鼠标经过的颜...2017-01-22
- 在php中日期对比用得比较多了,还有一个日期加减也用到不少,下面我拿两个例子来给大家介绍在php中日期操作方法吧,希望文章能给你带来帮助 功能需求 文章发布时段操...2016-11-25
- 本例子不是读取Excel或生成新的Excel,而是读取现有的Excel文件,然后修改Excel中的数据,就像修改mysql中数据一样的哦。 代码如下 ...2016-11-25
- 正则提取图片中的地址我们介绍过很多的相关文章了,下面再来给各位介绍一个可以提取内容中第一张图片的例子,希望对各位有帮助。 代码如下 复制代码 ...2016-11-25
- 最近看到博客留言的头像有点别扭,因为游客的头像都是同一个头像,看着不是很舒服。虽然现在绝大多数的主题集成了Gavatar头像功能,先不说gavatar被墙的问题,我自己现在都没...2016-11-25
- php判断字符串是否包含另一个字符串的实现方法有许多的办法,像我们在网上一搜索可看到大量关于字符是否包含指定字符的方法,下面我把这些实用的例子整理一起与大家分享...2016-11-25
- date函数是php中一个非常好用的日期获取函数了,我们可以使用它来获取指定日期或者当前日期了,下面我来简单的介绍一下date函数用法与常用用法吧。 PHP星期几获取代...2016-11-25
- ODBC方式连接数据库在mssql中我们通常会用到到了就连小编最初使用的asp也是使用此模式来连接数据库进行查询了,今天我们一起来看一篇关于php5.6使用ODBC链接mssql(包括...2016-11-25
- 对于cookie path很多的朋友不以为燃了这样会发现就是因为一个小点或一个路径问题测试了一天发现读取不了cookie值了,今天我就来给大家介绍cookie中路径的一些例子与注...2016-11-25
- 文件锁可以防止文件读写时多人访问时出现共享问题或数据不准确的问题,下面我们来看一篇关于php文件锁类防止并发的例子,具体如下. 工作间隙写了个文件锁的类,用于...2016-11-25
- 404状态代码在php中可以使用header输出但不能使用echo或print输出哦,许多的朋友把这个给搞混了,下面我们来看一篇关于php输出404状态码的例子 例子 代码如...2016-11-25
- Listing 4. simplemovie.mxml <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:VBox...2016-11-25
- 数组转xml用到不多用数组转json比较多了,但今天有一个功能就是必须要把数组转换成xml了,下面小编人网上找到了一段关于php 数组转xml的代码测试了都可以使用,下面整理分...2016-11-25
- 本文主要介绍AngularJS包括的基础知识,这里整理了相关资料并附示例代码和实现效果图,有需要的小伙伴可以参考下...2016-08-24
- 在php中我们要查看mysql数据库的信息我们可以直接连接mysql之后再调用mysql相关语句就可以实现了,下面给各位整理了一篇文章希望对大有帮助。 首先我们需要了解下...2016-11-25
- php怎么写网页?本文介绍了一个php网页的例子,大家可以参考一下如何用php语言写网页。 index.php 代码如下 复制代码 <html><head> <title>Fi...2017-07-06
- SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于...2016-11-25
- xmllint是一个很方便的处理及验证xml、处理html的工具,linux下只要安装libxml2就可以使用这个命令。首先看下其结合--html 、--xpath参数处理html时的例子: 例子...2016-11-25