多谢 dogun ,验证密码的问题,我解决如下: 经验证,发现$psw确实为"abc ", "select * from test where psw='".$psw."'" 改为 "select * from test where psw like '".$psw."'",则"abc "不会再通过了,看来是MYSQL查询的问题,mysql对字符串是怎么匹配的呢?为什么 = 与 like 不一样?COOKIE的问题: test.php:setcookie ("test","111",time()+3600);header("location:index.php");index.php:echo $test; //这里输出为空我现在发现是由于在test.php中用了 header,如果将header 改为 用脚本跳转页面,则在index.php中可以输出 $test 为111; 为什么用了header函数COOKIE就不正常了呢?有什么办法解决这个问题么?PHP中有什么函数相当于 ASP 中的response.redirect呢?
注册新的变数。语法: boolean session_register(string name);传回值: 布林值函式种类: 资料处理
内容说明
本函式在全域变数中增加一个变数到目前的 Session 之中。参数 name 即为欲加入的变数名。成功则传回 true 值。
HTTP/1.0 206 Partial Content
Date: Sat, 12 Jan 2002 09:16:32 GMT
Server: Apache/1.3.14 (Unix)
Last-Modified: Mon, 07 Jan 2002 09:35:11 GMT
ETag: "bde02-23369d95-3c396bcf"
Accept-Ranges: bytes
Content-Length: 317281024
Content-Type: text/plain用了header后会有
Location: aim.htm
浏览器接受到以后,就转向aim.htm了,因为这些头信息都是在网页内容出现之前浏览器接受的,所以在使用header函数时,其前面不能有任何的输出。
mysql_pconnect 和 mysql_connect 哪个更常用?mysql_pconnect 不可以用 mysql_close 关闭,那么什么时候关闭呢?分数最后结算
我觉得如果连接数据库频繁的话还是用mysql_pconnect比较不错,如果已经连接过数据库的话,下次系统只是直接返回已经建立的持续连接的ID号,而不再去真的连接数据库。
我使用以下程序测试:
<?
require("env.php");
$r1 = time();
for($i = 0; $i < 5000; $i ++) {
$con = mysql_connect($hostname,$dbusername,$dbpasswd);
mysql_close($con);
}
$r2 = time();
echo 'start:';
echo $r1;
echo ' end:';
echo $r2;
echo ' start-end=';
echo $r2-$r1;
?>
开始用mysql_connect连接数据库,用mysql_close关闭连接,记录开始的时间和结束的时间,所得结果为:
start:1010914331 end:1010914356 start-end=25
start:1010914517 end:1010914544 start-end=27
start:1010914560 end:1010914586 start-end=26然后改用mysql_pconnect连接:
start:1010914613 end:1010914614 start-end=1
start:1010914623 end:1010914624 start-end=1
start:1010914633 end:1010914634 start-end=1看来用pconnect好像要快的多!
我又试着用mysql_connect,连接后不用mysql_close关闭,得到很奇怪的结果:
start:1010914669 end:1010914669 start-end=0
start:1010914700 end:1010914700 start-end=0
start:1010914705 end:1010914705 start-end=0看php的手册上说:实际上本函式(mysql_close)不是一定需要的,当 PHP 整页程式结束后,将会自动关闭与资料库的非永久性 (non-persistent) 连线。
看来这次是系统帮忙关闭的连接,时间当然没有算在内了!
从以上测试看来,当访问量比较大,连接数据库比较频繁时,用mysql_pconnect还是比较好的!
结果如下:
<?
require("env.php");
$r1 = microtime();
for($i = 0; $i < 50000; $i ++) {
$con = mysql_connect($hostname,$dbusername,$dbpasswd);
mysql_close($con);
}
?>
页面超时时间设为120秒。在这个页面执行的过程中来测试:
<?
require("env.php");
$r1 = microtime();
// for($i = 0; $i < 5000; $i ++) {
$con = mysql_connect($hostname,$dbusername,$dbpasswd);
mysql_connect($con);// }
$r2 = microtime();
echo 'start:';
echo $r1;
echo ' end:';
echo $r2;
echo ' start-end=';
echo $r2-$r1;
?>
首先是mysql_connect,结果为:
start:0.01470200 1010915439 end:0.32504000 1010915439 start-end=0.310338
start:0.62859100 1010915455 end:0.94522100 1010915455 start-end=0.31663
start:0.19679600 1010915482 end:0.51151500 1010915482 start-end=0.314719然后用mysql_pconnect,打开页面后,记录结果,关掉浏览器,再重新打开,测得结果为:
start:0.84367400 1010915507 end:0.87489600 1010915507 start-end=0.031222
start:0.10627600 1010915593 end:0.14592600 1010915593 start-end=0.03965
start:0.16655900 1010915614 end:0.19482700 1010915614 start-end=0.028268
start:0.33137200 1010915645 end:0.37370400 1010915645 start-end=0.042332以上测试是在windows2000 pro,Apache/1.3.22 (Win32),mysql/3.23.43
PIII667,256M/PC133,IBM/60GXP/40G/7200转
测得。
用mysql_pconnect应该也不直是一个连接,系统应该是返回可用的连接ID值,如果上次的连接因为某种原因不可用了(比如mysql服务器重启,或者网络传输出现问题),mysql_pconnect应该会建立新的连接的.由于mysql也是通过socket来创建连接,所以即使用mysql_pconnect不可能永久的连接.
我理解连接数据库的时间和操作数据库的时间是互相制约的,用mysql_pconnect虽然连接数据库时间短了,但这个连接ID是提供给好多页面使用的,所以如果访问量大的话操作数据库肯定时间就长了,而mysql_connect使得每个页面拥有一个连接,操作数据库肯定会更快.但mysql怎么也是个小型数据库,能连接的用户不能太多,所以访问量大的话还是用mysql_pconnect好一点吧.
而不是一个连接。
MySQL 3.23.44 for windows 支持 外键么?
即,sql语句中可以写 "foreign key ……" 么?或者说写了能起约束作用么?phpmyadmin中定义表时,最右边 fulltext 复选框什么意思?
fulltext好像是什么全文索引,具体的不太清楚,你看以下mysql的文档吧.
又加了20分,加问三个问题:
①如何使页面有效期为0?即PHP中什么函数相当于ASP中的response.expires=0?②linux中文件名限制为8.3格式么?我现在在WIN2K IIS中写PHP,文件名超过8位长度,在LINUX主机上是否会出现错误?③我在MYSQL中定义了一个表,其中一字段名为 "Name" (N 是大写),然后用
$row=mysql_fetch_array(mysql_query("select * from test"));
echo $row["name"]; //输出为空
echo $row["Name"]; //有输出难道这里也区分大小写么?
<?php
if ($ok) {
……
$result=mysql_query("select * from test where psw='".$psw."'");
if (!mysql_num_rows($result)) {
echo "密码错误";
} else {
echo "通过";
}
}
?>
……
<form method=post action="<?echo $PHP_SELF?>">
<input type="password" name="psw">
<input type="submit" name="ok" value="提交">
</form>假设密码是abc,当我输入abc,提交时是通过的,但如果我输入abc再加空格,仍然是通过的,为什么 $psw="abc" 而不是 $psw="abc "?请高手指教分数仍然可以再加,300分顶头,望各位高手不吝赐教,谢谢
数组的索引值是区分大小写的.
cookie的值直接可以用,比如你用了setcookie('name', 'value');要得到这个cookie的值,只需要用$name就是了.
还有那个验证密码的,你在验证之前有没有用过trim($psw),要不就是你数据库里真的存在psw='abc '的资料
经验证,发现$psw确实为"abc ",
"select * from test where psw='".$psw."'" 改为
"select * from test where psw like '".$psw."'",则"abc "不会再通过了,看来是MYSQL查询的问题,mysql对字符串是怎么匹配的呢?为什么 = 与 like 不一样?COOKIE的问题:
test.php:setcookie ("test","111",time()+3600);header("location:index.php");index.php:echo $test; //这里输出为空我现在发现是由于在test.php中用了 header,如果将header 改为 用脚本跳转页面,则在index.php中可以输出 $test 为111;
为什么用了header函数COOKIE就不正常了呢?有什么办法解决这个问题么?PHP中有什么函数相当于 ASP 中的response.redirect呢?
在访问一个曾经设置过cookie的站点时,浏览器发出的请求为:GET / HTTP/1.1
Accept: */*
Referer: http://nic.hziee.edu.cn/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
If-Modified-Since: Fri, 14 Sep 2001 03:11:46 GMT
If-None-Match: "263910fdca3cc11:9de"
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)
Host: nic.hziee.edu.cn
Connection: Keep-Alive
Cookie: ASPSESSIONIDQGGQQKBG=ABPDGBKBLLOMPLIIOOBIBIKC //浏览器发送已经设置过的cookie当你在setcookie的时候同时使用header('location:index.php')时,浏览器直接转向index.php,并没有发送类似Cookie: ASPSESSIONIDQGGQQKBG=ABPDGBKBLLOMPLIIOOBIBIKC的信息,或者发送的是在这次setcookie之前的cookie,index.php当然不会得到$test的值,如果没有用header的话,浏览器所发送的请求中就会有最新的Cookie的值.
asp没有怎么好好研究过,它的response.redirect也应该是使用location来使浏览器重定向的.所以和header('location:index.php');应该是一样的.
setcookie 和 header 不能一起用,如果是ASP就不会有这样的问题,难道只有用脚本么?可不可以用header函数一起发送cookie呢?