PHP使用mysqlnd驱动的配置详解
我的PHP环境是5.4,使用mysql时突然出现以下错误:
mysql_connect(): Headers and client library minor version mismatch. Headers:50508 Library:50166
索性换成mysqlnd扩展,下面简单介绍mysqlnd:
mysqlnd(MySQL native driver for PHP)是php5.3后php自带的mysql驱动,官方推荐使用,优势如下:
A.libmysql驱动是由mysql AB公司(现在是oracle公司)编写, 并按mysql license许可协议发布,所以在PHP中默认是被禁用的.
而mysqlnd是由php官方开发的驱动,以php license许可协议发布,故就规避了许可协议和版权的问题
B.因为mysqlnd内置于PHP源代码,故你在编译安装php时就不需要预先安装mysql server也可以提供mysql client API (mysql_connect, pdo , mysqli), 这将减化一些工作量.
C. mysqlnd是专门为php优化编写的驱动,它使用了PHP本身的特性,在内存管理,性能上比libmysql更有优势. php官方的测试是:libmysql将每条记录在内存中保存了两份,而mysqlnd只保存了一份
D. 一些新的或增强的功能
增强的持久连接
引入特有的函数mysqli_fetch_all()
引入一些性能统计函数 mysqli_get_cache_stats(), mysqli_get_client_stats(),
mysqli_get_connection_stats(),
使用上述函数,可很容易分析mysql查询的性能瓶颈!
SSL支持(从php 5.3.3开始有效)
压缩协议支持
命名管道支持(php 5.4.0开始有效)
如何使用mysqlnd驱动?
传统的编译php时带如下参数:
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql
查看编译参数:
[root@localhost php54]#./configure --help | grep mysql
--with-mysql=DIR Include MySQL support. DIR is the MySQL base
mysqlnd the MySQL native driver will be used
--with-mysql-sock=SOCKPATH MySQL/MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer.
--with-mysqli=FILE Include MySQLi support. FILE is the path
to mysql_config. If no value or mysqlnd is passed
--enable-embedded-mysqli MYSQLi: Enable embedded support
--with-pdo-mysql=DIR PDO: MySQL support. DIR is the MySQL base directory
If no value or mysqlnd is passed as DIR, the
--enable-mysqlnd Enable mysqlnd explicitly, will be done implicitly
--disable-mysqlnd-compression-support
Disable support for the MySQL compressed protocol in mysqlnd
--with-zlib-dir=DIR mysqlnd: Set the path to libz install prefix
可以看到只要不指定,默认就是mysqlnd。于是重新编译PHP:
./configure --prefix=/usr/local/php54 --with-config-file-path=/usr/local/php54/etc --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --with-curl --with-curlwrappers --enable-fpm --with-mcrypt --with-gd --with-openssl --with-mhash --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc -enable-zip --enable-soap--with-mysql --with-pdo-mysql --with-mysqli
经常会碰到需要从数据库中导出数据到Excel文件,用一些开源的类库,比如 PHPExcel,确实比较容易实现,但对大量数据的支持很不好,很容易到达PHP内存使用上限。这里的方法是利用fputcsv写CSV文件的方法,直接向浏览器输出Excel文件。
<?php
// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');</p>
<p>// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql = 'select * from tbl where ……';
$stmt = $db->query($sql);</p>
<p>// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');</p>
<p>// 输出Excel列名信息
$head = array('姓名', '性别', '年龄', 'Email', '电话', '……');
foreach ($head as $i => $v) {
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$head[$i] = iconv('utf-8', 'gbk', $v);
}</p>
<p>// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);</p>
<p>// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;</p>
<p>// 逐行取出数据,不浪费内存
while ($row = $stmt->fetch(Zend<em>Db::FETCH</em>NUM)) {</p>
<pre><code>$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}
foreach ($row as $i =&gt; $v) {
$row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
</code></pre>
<p>}
简单易用,非常节省内存,不依赖第三方类库。
对于获得最后插入数据的记录ID号我们通常会用到mysql_insert_id()或select max(id)来操作了,下面一起来看看小编对于这两个函数的一些理解。这个问题以前绝壁遇到过,太久没写不记得(貌似当时是CI框架直接有相关函数的),然后这次又遇到了,再次滚去查了一下,这里说的并非是PDO之类的情况,而是用过时的连接和执行方式之后怎么进行操作。
有什么SQL语句实现的,但明显不合适,当收到多人操作时,顿时就混乱不堪。
所以在此,用mysql_insert_id()函数搞定,他会返回AUTO_INCRESEMENT的值。
代码如下 | 复制代码 |
<?php mysql_query("INSERT INTO mytable (product) values ('kossu')"); |
刚开始我还在想这个函数不会遇到相同的问题么,然后小新告诉我是基于当前数据库连接的,顿时不怕不怕啦。
当然还有
代码如下 | 复制代码 |
mysql_query("select max(id) from t1",$link); |
当然,现在这种连接方式已经out的可以了,
这里也有说明:
Warning
This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include:
mysqli_insert_id()
PDO::lastInsertId()
本文实例讲述了可用mysql,mssql,pg三种数据库的数据库操作类,你只要作任何修改就可以方便的改变你数据库的类型.分享给大家供大家参考。具体分析如下:
函数清单,索引:
Open:打开数据库连接 Line:71
Close:关闭数据库连接 Line:107
SelectDB:选择数据库 Line:129
Query:创建查询 Line:151
DataSeek:移动记录指针 Line:175
FieldName:获取字段名称 Line:198
FieldType:获取字段类型 Line:220
FieldLenght:获取字段长度 Line:242
FetchRow:获取数据并保存到数组(数字索引) Line:264
FetchArray:获取数据并保存进数组(数字和关联) Line:289
FetchObject:获取数据并保存到对象(对象方式) Line:315
Result:获取结果数据 Line:341
FreeResult:刷新记录集 Line:363
RowsNumber:获取记录数量 Line:385
FieldsNumber:获取字段数量 Line:407
CurRecNumber:获取当前记录号(从0开始) Line:429
RecordNumber:获取当前行号(从1开始) Line:438
MoveFirstRec:移动到第一条记录 Line:447
MoveLastRec:移动到最后一条记录 Line:469
MovePreviousRec:移动到前一条记录 Line:495
MoveNextRec:移动到下一条记录 Line:521
MoveToRec:移动到一个特定的记录(从1开始) Line:548
php数据库操作类代码如下:
代码如下 | 复制代码 |
<?PHP /********************************************************************************** 此类将数据库操作封装,具有良好的可移植性,针对数据库:mysql,mssql,pg ************************************************************************************ // -函数清单 索引: // - Open: 打开数据库连接 Line:71 // - Close: 关闭数据库连接 Line:107 // - SelectDB: 选择数据库 Line:129 // - Query: 创建查询 Line:151 // - DataSeek: 移动记录指针 Line:175 // - FieldName: 获取字段名称 Line:198 // - FieldType: 获取字段类型 Line:220 // - FieldLenght: 获取字段长度 Line:242 // - FetchRow: 获取数据并保存到数组(数字索引) Line:264 // - FetchArray: 获取数据并保存进数组(数字和关联) Line:289 // - FetchObject: 获取数据并保存到对象(对象方式) Line:315 // - Result: 获取结果数据 Line:341 // - FreeResult: 刷新记录集 Line:363 // - RowsNumber: 获取记录数量 Line:385 // - FieldsNumber: 获取字段数量 Line:407 // - CurRecNumber: 获取当前记录号(从0开始) Line:429 // - RecordNumber: 获取当前行号(从1开始) Line:438 // - MoveFirstRec: 移动到第一条记录 Line:447 // - MoveLastRec: 移动到最后一条记录 Line:469 // - MovePreviousRec: 移动到前一条记录 Line:495 // - MoveNextRec: 移动到下一条记录 Line:521 // - MoveToRec: 移动到一个特定的记录(从1开始) Line:548 ************************************************************************************ //Inputs: // - dbType: databases type: mssql, mysql, pg // - connectType: connection type: c - common connection, // p - open persistent connection // - connect: for MS SQL Server - server name, // for MySQL - hostname [:port] [:/path/to/socket] , // for PostgreSQL - host, port, tty, options, // dbname (without username and password) // - username // - password // - dbName: database name // - query: SQL query // - result: result set identifier // - RowNumber: // - offset: field identifier // - ResultType: a constant and can take the following values: PGSQL_ASSOC, PGSQL_NUM, and PGSQL_BOTH // - FieldName // //Returns: // - result: result set identifier // - connect link identifier // - record number (starting at 0: CurrRecNumber or starting at 1: RecordNumber) // - number of fields in the specified result set // - number of rows in the specified result set *************************************************************************************/ Class mDatabase { /***********************************成员变量定义***************************************/ var $dbType; // 数据库类型: mssql, mysql, pg var $connectType; // 连接类型: c - common connection, p - open persistent connection var $idCon; // 连接号 var $curRow; // current row number of data from the result // associated with the specified result identifier array var $seek; // current row number of data from DataSeek function array /***********************************成员方法实现***************************************/ /************************************************************************************ *连接数据库的函数 *************************************************************************************/ Function Open($dbType, $c, $connect, $username = "", $password = "") { $this->dbType = $dbType; Switch ($dbType) { Case "mssql": If ($connectType == "c") { $idCon = mssql_connect($connect, $username, $password); } Else { $idCon = mssql_pconnect($connect, $username, $password); } Break; Case "mysql": If ($connectType == "c") { $idCon = mysql_connect($connect, $username, $password); } Else { $idCon = mysql_pconnect($connect, $username, $password); } Break; Case "pg": If ($connectType == "c") { $idCon = pg_connect($connect . " user=" . $username . " password=" . $password); } Else { $idCon = pg_pconnect($connect . " user=" . $username . " password=" . $password); } Break; Default: $idCon = 0; Break; } $this->idCon = $idCon; Return $idCon; } /************************************************************************************ *关闭数据库连接 *************************************************************************************/ Function Close() { Switch ($this->dbType) { Case "mssql": $r = mssql_close($this->idCon); Break; Case "mysql": $r = mysql_close($this->idCon); Break; Case "pg": $r = pg_close($this->idCon); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *选择数据库 *************************************************************************************/ Function SelectDb($dbName) { Switch ($this->dbType) { Case "mssql": $r = mssql_select_db($dbName); Break; Case "mysql": $r = mysql_select_db($dbName); Break; Case "pg": $r = False; Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *创建查询 *************************************************************************************/ Function Query($query) { Switch ($this->dbType) { Case "mssql": $r = mssql_query($query, $this->idCon); Break; Case "mysql": $r = mysql_query($query, $this->idCon); Break; Case "pg": $r = pg_exec($this->idCon, $query); Break; Default: $r = False; Break; } $this->curRow[$r] = 0; $this->seek[$r] = 0; Return $r; } /************************************************************************************ *移动记录指针 *************************************************************************************/ Function DataSeek($result, $RowNumber) { Switch ($this->dbType) { Case "mssql": $r = mssql_data_seek($result, $RowNumber); Break; Case "mysql": $r = mysql_data_seek($result, $RowNumber); Break; Case "pg": $r = False; Break; Default: $r = False; Break; } $this->seek[$result] = (int) $RowNumber; Return $r; } /************************************************************************************ *获取字段名 *************************************************************************************/ Function FieldName($result, $offset) { Switch ($this->dbType) { Case "mssql": $r = mssql_field_name($result, $offset); Break; Case "mysql": $r = mysql_field_name($result, $offset); Break; Case "pg": $r = pg_fieldname($result, $offset); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取字段类型 *************************************************************************************/ Function FieldType($result, $offset) { Switch ($this->dbType) { Case "mssql": $r = mssql_field_type($result, $offset); Break; Case "mysql": $r = mysql_field_type($result, $offset); Break; Case "pg": $r = pg_fieldtype($result, $offset); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取字段长度 *************************************************************************************/ Function FieldLength($result, $offset) { Switch ($this->dbType) { Case "mssql": $r = mssql_field_length($result, $offset); Break; Case "mysql": $r = mysql_field_len($result, $offset); Break; Case "pg": $r = pg_fieldsize($result, $offset); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取数据并保存到数组,可以用数字索引方式访问数组 *************************************************************************************/ Function FetchRow($result, $RowNumber = 0) { Switch ($this->dbType) { Case "mssql": $r = mssql_fetch_row($result); Break; Case "mysql": $r = mysql_fetch_row($result); Break; Case "pg": $r = pg_fetch_row($result, $RowNumber); If ($r) { $this->curRow[$result] = $RowNumber; $this->seek[$result] = $RowNumber; } Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取数据并保存到数组,可以用数字索引和关联索引的方式访问 *************************************************************************************/ Function FetchArray($result, $RowNumber = 0, $ResultType = 2) { Switch ($this->dbType) { Case "mssql": $r = mssql_fetch_array($result); Break; Case "mysql": $r = mysql_fetch_array($result); Break; Case "pg": $r = pg_fetch_array($result, $RowNumber, $ResultType); If ($r) { $this->curRow[$result] = $RowNumber; $this->seek[$result] = $RowNumber; } Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取数据并保存到对象 *************************************************************************************/ Function FetchObject($result, $RowNumber = 0, $ResultType = 2) { Switch ($this->dbType) { Case "mssql": $r = mssql_fetch_object($result); Break; Case "mysql": $r = mysql_fetch_object($result); Break; Case "pg": $r = pg_fetch_object($result, $RowNumber, $ResultType); If ($r) { $this->curRow[$result] = $RowNumber; $this->seek[$result] = $RowNumber; } Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取结果数据 *************************************************************************************/ Function Result($result, $RowNumber, $FieldName) { Switch ($this->dbType) { Case "mssql": $r = mssql_result($result, $RowNumber, $FieldName); Break; Case "mysql": $r = mysql_result($result, $RowNumber, $FieldName); Break; Case "pg": $r = pg_result($result, $RowNumber, $FieldName); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *释放结果数据 *************************************************************************************/ Function FreeResult($result) { Switch ($this->dbType) { Case "mssql": $r = mssql_free_result($result); Break; Case "mysql": $r = mysql_free_result($result); Break; Case "pg": $r = pg_freeresult($result); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取记录数量 *************************************************************************************/ Function RowsNumber($result) { Switch ($this->dbType) { Case "mssql": $r = mssql_num_rows($result); Break; Case "mysql": $r = mysql_num_rows($result); Break; Case "pg": $r = pg_numrows($result); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取字段数量 *************************************************************************************/ Function FieldsNumber($result) { Switch ($this->dbType) { Case "mssql": $r = mssql_num_fields($result); Break; Case "mysql": $r = mysql_num_fields($result); Break; Case "pg": $r = pg_numfields($result); Break; Default: $r = False; Break; } Return $r; } /************************************************************************************ *获取当前记录号(从0开始) *************************************************************************************/ Function CurRecNumber($result) { $r = $this->curRow[$result]; Return $r; } /************************************************************************************ *获取当前行号(从1开始) *************************************************************************************/ Function RecordNumber($result) { $cr = $this->CurRecNumber($result) + 1; Return $cr; } /************************************************************************************ *移动到第一条记录 *************************************************************************************/ Function MoveFirstRec($result) { Switch ($this->dbType) { Case "pg": $r = $this->FetchRow($result, 0); Break; Default: $rn = $this->DataSeek($result, 0); If ($rn) { $r = $this->FetchRow($result); If ($r) $this->curRow[$result] = $this->seek[$result]; } Else { $r = False; } Break; } Return $r; } /************************************************************************************ *移动到最后一条记录 *************************************************************************************/ Function MoveLastRec($result) { $rs = $this->RowsNumber($result); If ($rs) { $rs--; Switch ($this->dbType) { Case "pg": $r = $this->FetchRow($result, $rs); Break; Default: $rn = $this->DataSeek($result, $rs); If ($rn) { $r = $this->FetchRow($result); If ($r) $this->curRow[$result] = $this->seek[$result]; } Else { $r = False; } Break; } } Return $r; } /************************************************************************************ *移动到前一条记录 *************************************************************************************/ Function MovePreviousRec($result) { $rs = $this->CurRecNumber($result); If ($rs) { $rs--; Switch ($this->dbType) { Case "pg": $r = $this->FetchRow($result, $rs); Break; Default: $rn = $this->DataSeek($result, $rs); If ($rn) { $r = $this->FetchRow($result); If ($r) $this->curRow[$result] = $this->seek[$result]; } Else { $r = False; } Break; } } Return $r; } /************************************************************************************ *移动到下一条记录 *************************************************************************************/ Function MoveNextRec($result) { $rs = $this->CurRecNumber($result); $rn = $this->RowsNumber($result); $rs++; If ($rs != $rn) { Switch ($this->dbType) { Case "pg": $r = $this->FetchRow($result, $rs); Break; Default: $re = $this->FetchRow($result); If ($re) { $r = $re; $this->curRow[$result]++; $this->seek[$result] = $this->curRow[$result]; } Else { $r = False; } Break; } } Return $r; } /************************************************************************************ *移动到指定记录(编号从0开始) *************************************************************************************/ Function MoveToRec($result, $RowNumber) { $rn = $this->RowsNumber($result); If ($RowNumber > 0 And $RowNumber < $rn) { $RowNumber--; Switch ($this->dbType) { Case "pg": $r = $this->FetchRow($result, $RowNumber); Break; Default: $rn = $this->DataSeek($result, $RowNumber); If ($rn) { $r = $this->FetchRow($result); If ($r) $this->curRow[$result] = $this->seek[$result]; } Else { $r = False; } Break; } } Return $r; } } //********************************方法实现完毕****************************************// ?> |
我没有骗你吧,真的是我见过最强大的php数据库操作类。
下面我们来看看php pdo_mysql连接报错Connection failed: SQLSTATE[HY000] [2002] No such file or directory问题的解决办法。错误
Connection failed: SQLSTATE[HY000] [2002] No such file or directory
环境概述:
MacOS
xampp 搭建的开发环境 apache mysql php
xampp 已支持mysql oracle 测试ok,且 phpinfo已上显示支持pdo_mysql pdo_pgsql pdo_sqlite
其中mysql我用的是brew包管理安装到机器里面的,而非xampp自带的mysql
php pdo 连接报错 Connection failed: SQLSTATE[HY000] [2002] No such file or directory
开始以为找不到文件是因为 url rewrite导致的,(因为从nginx切换到apache)结果跟踪程序发现是 new pdo 报错
经过搜索一些资料研究发现:
这个是php.ini配置文件中pdo_mysql.default_socket指定的mysql.sock路径不对
我的mysql.sock文件在 /private/tmp/mysql.sock
所以要设置:
pdo_mysql.default_socket=/private/tmp/mysql.sock
如果不知道自己的mysql.sock在哪里可以搜索(因为编译安装,和yum、apt-get、或者brew等包管理工具安装的位置不一样)
sudo find / -name ‘mysql.sock’
下面是官方给出bug修复
1. Open up php.ini (mine was in /private/etc/)
2. locate this line: pdo_mysql.default_socket=/var/mysql/mysql.sock
3. Change the line to: pdo_mysql.default_socket=/tmp/mysql.sock
4. Restart apache
1、我这里需要补充下,如果是新系统或者刚玩php的同志,在Mac的系统中php.ini 文件不存在,
2、需要在/private/etc/目录下cp php.ini.default
php.ini ,然后再做修改下,
3、但是如果使用的xampp mysql作为数据库,那么就不需要使用官方的step2,直接写下面方式就可以了。
pdo_mysql.default_socket=/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
解决方法三
sudo vim /etc/php.ini
把以下三个原来空白的值都设置为 /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket =/tmp/mysql.sock
都修改了
修改完成后使用
sudo /usr/sbin/apachectl restart
相关文章
IntelliJ IDEA2021.1 配置大全(超详细教程)
这篇文章主要介绍了IntelliJ IDEA2021.1 配置大全(超详细教程),需要的朋友可以参考下...2021-04-18- VPN可以虚拟出一个专用网络,让远处的计算机和你相当于处在同一个局域网中,而中间的数据也可以实现加密传输,用处很大,特别是在一些大公司,分公司处在不同的区域。...2016-01-27
- 这篇文章主要介绍了Tomcat配置及如何在Eclipse中启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-04
- 如果我们需要安培Laravel4的话最php最低要求要在php5.3.7版本并且我们需要把mcrypt与openss这两个扩展开启才可以,具体步骤我们参考下文。 前面我们介绍我了 com...2016-11-25
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24如何使用php脚本给html中引用的js和css路径打上版本号
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24详解Maven profile配置管理及激活profile的几种方式
这篇文章主要介绍了详解Maven profile配置管理及激活profile的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-26jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31安装和使用percona-toolkit来辅助操作MySQL的基本教程
一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24- C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了IDEA如何添加配置文件到classpath中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-09-19
- 一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
- 通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
- 以下就是部署PHP时的4个配置修改说明,大家一个一个进行学习研究。1、short_open_tag 是什么呢? 决定是否允许使用代码开始标志的缩写形式(<? ?> )。如果要和 XML 结合使用PHP,可以禁用此选项以便于嵌入使用<?x...2015-10-21