打印

[php] php+mysql学习笔记

我是从asp转到php的,下面是我最近学php的时候碰到的问题以及相关的解答,希望能对和我一样的初学者有所帮助

1.关于mysql的数据类型

mysql没有Boolean数据类型,可以用tinyint(1)来替代,因为在php里,0被认为是false,而1为true.

但是经过测试,发现括号里面的1其实并没有用处.tinyint占用一个字节,8位,可存储范围2^8即0~255,默认范围是-128~127

括号里面的1代表所占宽度为1(显示宽度)
引用:
<?php

$result=mysql_query('SELECT * FROM `user2`');
while($row=mysql_fetch_array($result))
{
echo $row['user_id'];
echo '<br />';
}
?>
user_id 类型为tinyint(1)和tinyint(10)的时候,输出的结果完全一样.当usr_id加上zerofill属性后,两者才会有区别.

之所以mysql用tinyint,是因为tinyint占的字节小,开销比较小.但是括号里面的数字是多少是无所谓的.

2.关于mysql_fetch_array()

这个函数的功能是返回一条记录集,将指针移到下一条记录集

我一直不是很明白这个函数返回的数组是一个什么样的结构,无意中发现了print_r函数,用在数组上,可以按照一定格式显示键和元素

将上面的代码稍作改变
引用:
<?php

$result=mysql_query('SELECT * FROM `user2`');
$row=mysql_fetch_array($result))
print_r($row);
?>
结果如下:
引用:
Array
(
    [0] => 1
    [user_id] => 1
)
豁然开朗,原来这个一维数组里面有两个元素,下标不同,值是相同的,所以在取字段值的时候$row['0']和$row['user_id']的结果是一样的.
如果还有不明白的,请看下面的例子.
引用:
<?php

$myarray=array(name=>myname,password=>'123456');
print_r($myarray);

?>
结果如下:
引用:
Array
(
    [name] => myname
    [password] => 123456
)
本帖最近评分记录
  • kuhanzhu 威望 +1 学习笔记,再接再厉,加点威望,以资鼓励。 2007-11-30 17:34
我的blog,酝酿中
1、补充:
create table gbook(id int auto_increment primary key,title varchar(50),lid bit default 0)

与ASP中的ACC、MSSQL数据库一样,bit同样适用于MySQL。

楼主再发挥,继续帖你的学习笔记,可以先占位。
乐于助人、严格管理、言多必失。无知者无罪。Keep your waiting,I am come back.
编程资源:http://book.kuhanzhu.com
对管理有异议,请前往事物区进行投诉。请勿PM。
MySQL中有Boolean类型-bool
永远是菜鸟
复制内容到剪贴板
代码:
create table test(boolcolumn bool not null default false);
insert into test set boolcolumn = true;
btw,请问kuhanzhu,占位叫不叫灌水?
永远是菜鸟

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!

回复 #4 Fanbin 的帖子

你这帖叫灌水。也可以叫版规咨询或者事物询问。
后台区管理是按照会员需要及利益来管理,我不会对把占位视为灌水。
因为斑竹还有个权力,叫删帖。
当占位的帖子没有被有用的资料填充后,斑竹就会把占位位置视为灌水而删除。
下面的回复请勿再针对本管理方法进行讨论,有问题可以去事物区交流。

[ 本帖最后由 kuhanzhu 于 2007-11-30 10:03 编辑 ]
乐于助人、严格管理、言多必失。无知者无罪。Keep your waiting,I am come back.
编程资源:http://book.kuhanzhu.com
对管理有异议,请前往事物区进行投诉。请勿PM。

TOP

不好意思,我这个笔记是即时的,边学边把自己觉得比较有用的东西拿出来大家分享(晕,在公司实在没事做了,闲的,呵呵)
本来想把整理的资料放在一起的,竟然不让编辑,只要写在下面了.

今天在研究一个很有用的东西,截取HTML字符串.

比如有一个网页只有几行
引用:
index.html
<HTML>
       <HEAD><TITLE>myhomepage</TITLE></HEAD>
       <BODY>
       正文内容
       </BODY>
</HTML>
我想把<TITLE>里面的字符串(即标题)截取出来.

分以下几步

1.打开这个文件
2.将文件内所有字符串都读出来
3.用正则表达式截取所需要的内容

第一步和第二步比较简单
引用:
if (file_exists('$page_path')==true)
{
       $of=fopen($page_path,r);
       $GetHtmlStr=fread($of,filesize($page_path));

}
注意fread()是读取所有行,fgets是读取一行,并将指针停留在下一行开头.


第三步需要建立正则表达式"(<title>)(.*)(</title>)"(关于正则可以去百度一下,不过不同的语言正则规范有差别)

用ereg()函数
引用:
ereg("(<title>)(.*)(</title>)",$string,$cutStr)
注意ereg()第三个参数是可有可无的,$cutStr是一个数组,正则式匹配的话,有几个括号就代表数组里有几项.

看到数组我就想print_r()一下,谁知道数组里字符串没有输出,查看源文件的时候才想起来HTML标记还需要转义一下

PHP里面的HTML转义函数htmlspecialchars(),但是好像是不能转数组的吧?

曾经想过做一个循环,每次取一项就转义一下然后再存回数组内,但是觉得太麻烦了.

后来发现有两个函数很有用explode(),implode()

implode()  数组转为字符串,我用"::"分割("::"这样的字符串一般网页里面不经常出现,你也可以再想更BT点的分割字符串)
explode()  字符串转为数组.

好了,有了这两个函数问题就解决了.
代码如下
引用:
$string='<html><title>myhomepage</title></html>';//代表已经把HTML的内容读出来了
if (ereg("(<title>)(.*)(</title>)",$string,$cutStr))
{
       $cutStr=htmlspecialchars(implode("::",$cutStr));
       $cutStr=explode("::",$cutStr);
       echo "<pre>";
       print_r($cutStr);
       echo "</pre>";
}else{
echo 'false';
}
网页显示结果
引用:
Array
(
    [0] => <title>myhomepage</title>
    [1] => <title>
    [2] => myhomepage
    [3] => </title>
)
说明:
[0]->包含整个匹配的字符串
[1]->第一个括号
[2]->第二个括号
...

ps:个人觉得php里面的函数真的很强大,asp,唉...

[ 本帖最后由 hadesmile 于 2007-11-30 16:16 编辑 ]
我的blog,酝酿中

TOP

楼主加油!感受下开源的力量
永远是菜鸟

TOP