Dec 20
做校赛的报名系统,插入队伍的时候要考虑队名是否重复,于是想到了使用MySQL的正则表达式。
以前虽然一直知道MySQL有正则表达式,但是因为有LIKE在,所以一直还不需要用它。
正好这次有了机会,就去试试吧。

MySQL的关键字 REGEXP 允许在SQL语句中匹配忽略大小写的POSIX正则表达式。
其实MySQL的文档里面写得非常详细了,给出了很多的例子,可以在这里看到
http://dev.mysql.com/doc/refman/5.1/zh/regexp.html

这里主要是记录一下在PHP里面还需要进行怎样的处理:
其实很简单,两个函数:

1。preg_quote()
转义正则表达式中的特殊字符,详情参见 http://cn.php.net/preg_quote
这本来是PHP为PCRE的正则表达式准备的,不过这里也是可以用的。

2。mysql_real_escape_string()
这个函数是用来转义特殊的SQL字符,同时也可以防止SQL注入攻击。
PHP文档的说明为:
本函数将 unescaped_string 中的特殊字符转义,并计及连接的当前字符集,因此可以安全用于 mysql_query()。
它有一个兄弟,mysql_escape_string(),不过不能针对当前字符集进行处理,所以不够安全
另外如果使用mysqli的话,也可以使用mysqli_real_escape_string()。

综合起来就是这样:
$team_name = mysql_real_escape_string(preg_quote($team_name));
$query = " SELECT * FROM `teams` WHERE `team_name` REGEXP '{$team_name}' ";
然后再ooxx地去查询吧。。。
Apr 19

php - readfile IE无法下载 不指定

felix021 @ 2008-4-19 03:45 [IT » 网络] 评论(1) , 引用(0) , 阅读(12887) | Via 本站原创
开始重写Felix的网络硬盘程序
用到这一段代码:
( /share/download.php?act=download&fid=3 )
header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length: " . $file->size);
header("Content-Disposition: attachment; filename=".$file->filename);
readfile("files/" . $file->filepath);

发现如果是直接在浏览器地址栏里面输入这个地址,如果被迅雷等下载程序接管,那么可以正常下载;但是如果用IE下载,则出现错误提示:
Internet Explorer 无法下载 download.php?act=download&fid=3 来自 127.0.0.1。
Internet Explorer 无法打开该 Internet 站点。请求的站点不可用,或找不到。请以后再试。
想了好久,telnet 127.0.0.1 80
GET /share/download.php?act=download&fid=3
显示出的内容也正常,用filefox也正常,用IE右键另存为也正常。
无意中发现,把前面的ob_start()和session_start()注释掉以后就OK了,再进一步,发现只要注释掉session_start()就OK了。但是想不明白为什么。可是我还需要session,郁闷。看来暂时只能用cookie代替了。。。
Tags: ,
Apr 16

PHP 连接 ACESS 不指定

felix021 @ 2008-4-16 18:03 [IT » 网络] 评论(0) , 引用(0) , 阅读(4033) | Via 本站原创
今天才知道PHP支持COM, 真是太恐怖了!

直接看代码吧:
<?PHP
//创建ADO连接
$conn = @new COM("ADODB.Connection") or die ("ADO连接失败!");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("db1.mdb");
$conn->Open($connstr);
//创建记录集查询
Tags: , ,
Apr 16

php - 取得当前所在目录 不指定

felix021 @ 2008-4-16 17:57 [IT » 网络] 评论(1) , 引用(0) , 阅读(8151) | Via 本站原创
echo realpath(".");
居然这么简单...哎.

2008.5.14补充:还有一个更直接的,
FUNCTION
getcwd
(PHP 4, PHP 5)
getcwd -- 取得当前工作目录
Tags: ,
Apr 16
考虑时区的情况, 这么写吧:
<?php
$GMT = +8;
echo date("Y-m-d H:i:s", time() + $GMT * 3600);
?>

还有一种更矬的办法:
<?php
$link = mysql_connect("127.0.0.1", "root", "hahahaha");
$result = mysql_query("select FROM_UNIXTIME(".time().") as timestr");
$line = mysql_fetch_array($result, MYSQL_ASSOC);
echo $line['timestr'];
?>
Tags: ,
Apr 16

php和mysql时间互换 不指定

felix021 @ 2008-4-16 16:02 [IT » 数据库] 评论(3) , 引用(0) , 阅读(17675) | Via 本站原创
from http://hi.baidu.com/beidu/blog/item/e3d1b7fd5a4dd31309244d5e.html

php和mysql时间互换

在mysql中有三种时间字段类型:DATETIME,DATE和TIMESTAMP。

DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据;DATE则是只有年月日以YYYY-MM-DD形式的字串;TIMESTAMP类型和PHP中的TIMESTAMP类型名字一样,但是两者基本上是不同的。
Tags: , ,
Apr 9
使用MySQLi的时候发现,输入中文进行更新的时候就会出现类似
引用
Data too long for column 'name' at row 1

这样的错误,上网搜了一下,解决办法是采用gbk或UTF-8编码。
我把所有的php脚本转换成了utf-8编码,然后在new mysqli;后面加入
@ $conn->query("SET NAMES 'utf8' ");

然后就正常了。

特别提示两点:
1。网页里面记得要在title前加上
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

2。上面命令里面是SET NAMES 'utf8',这里没有横杆!(不是utf-8)
Tags: , ,
Mar 2
想接一个资料站的项目. 虽然什么都还没开始具体考虑, 不过我突然想到上传资料的时候肯定是需要验证码的. 于是上网去搜. 百度了一下"验证码程序 PHP", 搜到一堆相同的文章, 代码是贴出来了,不过基本上只是介绍了如何生成验证码图片并加入干扰象素: 那代码把验证码放在了表单里作为隐藏的字段, 那就失去了意义. 不过作者提示, 可以用session来实现真正的验证码的安全性. 于是开始看和Session有关的东西. 以前一直觉得Session很神秘, 用了才知道, 简单的要死...靠...牛X的PHP啊.

所以这里先记录一下session的使用吧(session是什么?汗...百度一下吧):
Tags: , ,
分页: 1/3 第一页 1 2 3 下页 最后页 [ 显示模式: 摘要 | 列表 ]