
例如:PHP连接一个mysql数据库 *** 作的演示,
实现连接打开一个库,并读取数据的基本功能。
数据库名称为:test表名为:user
分别有7个字段:id userid sex age tel email address
服务器;数据库编码 均采用 utf-8
mysql_query("set names 'gbk'")// //这就是指定数据库字符集,一般放在连接数据库后(解决数据库乱码)
*/
?>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
<style type="text/css">
<!--
input { font-size:9pt}
A:link {text-decoration: underlinefont-size:9ptcolor:000059}
A:visited {text-decoration: underlinefont-size:9ptcolor:000059}
A:active {text-decoration: nonefont-size:9pt}
A:hover {text-decoration:underlinecolor:red}
body,table {font-size: 9pt}
tr,td{font-size:9pt}
-->
</style>
<title>注册会员列表 - 读取mysql的测试</title>
</HEAD>
<body alink="#FF0000" link="#000099" vlink="#CC6600" topmargin="8" leftmargin="0" bgColor="#FFFFFF">
<br><br><center><font color=green size=3><b>注 册 会 员 列 表</b></font></center>
<br>
<table cellspacing=0 bordercolordark=#FFFFFF width="95%" bordercolorlight=#000000 border=1 align="center" cellpadding="2">
<tr bgcolor="#6b8ba8" style="color:FFFFFF">
<td width="5%" align="center" valign="bottom" height="19">ID</td>
<td width="10%" align="center" valign="bottom">姓名</td>
<td width="5%" align="center" valign="bottom">性别</td>
<td width="5%" align="center" valign="bottom">年龄</td>
<td width="20%" align="center" valign="bottom">联系电话</td>
<td width="20%" align="center" valign="bottom">电子邮件</td>
<td width="20%" align="center" valign="bottom">家庭住址</td>
</tr>
<?
//连接到本地mysql数据库
$myconn=mysql_connect("localhost","root","root")
//选择test为 *** 作库
mysql_query("set names 'gbk'")// //这就是指定数据库字符集,一般放在连接数据库后面就系了
mysql_select_db("test",$myconn)
$strSql="select * from user"
//用mysql_query函数从user表里读取数据
$result=mysql_query($strSql,$myconn)
while($row=mysql_fetch_array($result))//通过循环读取数据内容
{
?>
<tr>
<td align="center" height="19"><?echo $row["id"]?></td>
<td align="center"><?echo $row["userid"]?></td>
<td align="center"><?echo $row["sex"]?></td>
<td align="center"><?echo $row["age"]?></td>
<td align="center"><?echo $row["tel"]?></td>
<td align="center"><?echo $row["email"]?></td>
<td align="center"><?echo $row["address"]?></td>
</tr>
<?
}
//关闭对数据库的连接
mysql_close($myconn)
?>
</table>
</BODY>
</HTML>
如何使用C语言开发PHP扩展。函数功能:php里面的整数是有符号数,其内部实现其实就是long,不是unsigned long。对于32位机器来说,php最大能表示的整数就是2^31-1了,一般在应用中碰到大于2^31-1而小于2^32的数就只能用字符串来表示了。对于mixed int_ext(string in)来说,如果字符串in表示的整数小于2^31-1,那么就返回整数,如果大于就返回字符串。
开发扩展步骤如下:(首先需要下载php的源码,这里下载的是php-5.3.14)
1,建立扩展骨架
[plain] view plaincopyprint?
01.cd php-5.3.14/ext
02../ext_skel --extname=int_ext
cd php-5.3.14/ext
./ext_skel --extname=int_ext
2,修改编译参数
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi config.m4
cd php-5.3.14/ext/int_ext
vi config.m4去掉 PHP_ARG_ENABLE(int_ext, whether to enable int_ext support 和
[ --enable-int_ext Enable int_ext support]) 两行前面的dnl 修改后为:
[plain] view plaincopyprint?
01.1. dnl Otherwise use enable:
02.2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
03.3. dnl Make sure that the comment is aligned:
04.4. [ --enable-int_ext Enable int_ext support])
1. dnl Otherwise use enable:
2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
3. dnl Make sure that the comment is aligned:
4. [ --enable-int_ext Enable int_ext support])
3,编写C代码
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi php_int_ext.h
03.#在 PHP_FUNCTION(confirm_int_ext_compiled)后面新增一行 PHP_FUNCTION(int_ext)
cd php-5.3.14/ext/int_ext
vi php_int_ext.h
#在 PHP_FUNCTION(confirm_int_ext_compiled)后面新增一行 PHP_FUNCTION(int_ext)[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi int_ext.c
03.#在PHP_FE(confirm_int_ext_compiled, NULL) 后面添加 PHP_FE(int_ext, NULL)添加后为:
04.1. zend_function_entry int_ext_functions[] = {
05.2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
06.3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
07.4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
08.5. }
cd php-5.3.14/ext/int_ext
vi int_ext.c
#在PHP_FE(confirm_int_ext_compiled, NULL) 后面添加 PHP_FE(int_ext, NULL)添加后为:
1. zend_function_entry int_ext_functions[] = {
2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
5. }
核心代码:
[plain] view plaincopyprint?
01.PHP_FUNCTION(int_ext)
02.{
03.char * str = NULL
04.int str_len
05.int argc = ZEND_NUM_ARGS()
06.if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == FAILURE)
07.return
08.char * result
09.int result_length = str_len
10.result = (char *) emalloc(result_length + 1)
11.memcpy(result,str,result_length)
12.unsigned long result_num = strtoul(result, NULL, 10)
13.int sizeoflong sizeof(long)
14.unsigned long max_long = 1 <<(sizeoflong * 8 -1)
15.if(result_num <max_long)
16.{
17.RETURN_LONG(result_num)
18.}
19.else
20.{
21. RESULT_STRINGL(result, result_length, 0)
22. }
23.}
PHP_FUNCTION(int_ext)
{
char * str = NULL
int str_len
int argc = ZEND_NUM_ARGS()
if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == FAILURE)
return
char * result
int result_length = str_len
result = (char *) emalloc(result_length + 1)
memcpy(result,str,result_length)
unsigned long result_num = strtoul(result, NULL, 10)
int sizeoflong sizeof(long)
unsigned long max_long = 1 <<(sizeoflong * 8 -1)
if(result_num <max_long)
{
RETURN_LONG(result_num)
}
else
{
RESULT_STRINGL(result, result_length, 0)
}
}
4,编译
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02./usr/local/php/bin/pphpize
03../configure --with-php-config=/usr/local/php/bin/php-config
04.make
05.make install
cd php-5.3.14/ext/int_ext
/usr/local/php/bin/pphpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
此时会产生一个so文件: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so
修改php.ini 添加扩展extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
[int_ext]
extension = int_ext.so
5,测试
[plain] view plaincopyprint?
01.$a = int_ext("12345678900")
02.var_dump($a)
03.$a = int_ext("123456789")
04.var_dump($a)
$a = int_ext("12345678900")
var_dump($a)
$a = int_ext("123456789")
var_dump($a)
结果输出:
[plain] view plaincopyprint?
01.string(11) "12345678900"
02.int(123456789)
比如在win下的lamp环境吧,你想要php支持某个扩展不是需要把php.ini文件的那个注释取消么,那个扩展是个文件类型为.dll的linux下为.soC语言能编译成这两种文件类型.或者说所有的扩展都是C编写的.欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)