vb连接数据库 求教!!!。。。

vb连接数据库 求教!!!。。。,第1张

关于VB6 + Access的简单数据库应用问题

最近,经常看到有人提问相关问题,心血来潮有一股冲动,把这个方面的应用在这里介绍一下。

我使用过的VB6提供的数据库连接控件有两个,一个是Data控件另一个是Adodc控件。

考虑到Data控件只能针对本地数据库的开发应用,并且它只支持VB5中的网格控件DBGrid控件,所以这里主要介绍Adodc控件。(注意:VB5的DBGrid控件,需要把DBGRID32OCX文件复制到c:\windows\system32\DBGRID32OCX进行引用)

下面介绍使用Adodc控件与DataGrid控件进行简易数据库的应用:

一.添加Adodc控件与DataGrid控件:

因为这两个控件默认状态下都不在“控件工具箱”内,所以需要手动添加到“控件工具箱”内。

1.添加Adodc控件:

在VB6里,通过菜单来添加该控件,方法:[工程] -- [部件],出现“部件”对话框,在“控件”选项卡里,通过滚动条,找到并勾选:Microsoft Ado Data Control 60 (SP6) (OLEDB),然后单击[确定],这样该控件图标就出现在“控件工具箱”里了,你可以像使用其它你熟悉的控件一样,添加到窗体上。

2.添加DataGrid控件:

方法与过程与添加Adodc控件过场相似,勾选的是:Microsoft DataGrid Control 60 (SP6) (OLEDB)。

二.连接数据:

为了说明,假设你有数据库文件“数据库Mdb”,在里边有数据表“学生基本信息”和“学生成绩”。

“学生基本信息”有字段:学号、姓名、性别(都是字符类型)

“学生成绩”有字段:学号、语文、数学、英语(学号字符类型,其它数值类型)

假设你添加的控件为:Adodc1和DataGrid。

1.先将Adodc1控件连接到数据库文件:(有两种方法)

方法1:设置Adodc1的ConnectionString属性,在属性窗口点带有省略号的按钮…选[生成] -- 选Microsoft Jet 40 OLE DB Privider -- [下一步]--单击省略号按钮,定位到你保存“数据库MDB”的位置,选中该数据库,单击[打开],连接成功了,可以测试一下。回到窗体,你会看到Adodc1的ConnectionString 属性里的一大串内容。

方法2:也可以用命令直接设置连接,在运行时通过执行该命令来完成连接,命令如下:

Adodc1ConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=C:\Program Files\Microsoft Visual Studio\VB98\ADODC控件实例\数据库mdb;Persist Security Info=False",值得说明以下,这个双引号里的内容,是我的实际情况,因为我在VB98文件夹里,建立了子文件夹“\ADODC控件实例”,并把使用的数据库文件复制到该文件夹里了。这里引号里的一大串内容,你可以从刚在属性窗口里直接复制过来,然后做一些改动,要注意这个改动往往是必要的也是非常关键的,因为考虑到一般情况,你的应用程序不可能安装到“\VB98”这个文件夹,所以一般的改动如下:

将“Source=C:\Program Files\Microsoft Visual Studio\VB98\ADODC控件实例\数据库mdb”改为“Source=" & AppPath & "\数据库mdb”即完整的情况如下:

Adodc1ConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=" & AppPath & "\数据库mdb;Persist Security Info=False"

接下来连接到数据表“学生基本信息”:

方法1:设置Adodc1的RecordSource 属性,在属性窗口点带有省略号的按钮,在“命令类型”里,选:2 – adCmdTable,在"表或存储过程名称"里,选“学生基本信息”,单击确定,你会看到ADODC1的RecordSource 属性栏里是“学生基本信息”。

方法2:也可以用命令直接设置连接:

Adodc1RecordSource = "学生基本信息"

至此,完成了ADODC1控件与数据库的连接。

三.将DataGrid1绑定到ADODC1控件:

选中窗体上的DataGrid1,设置其DataSource 属性,点右边的下拉按钮,选ADODC1,完成绑定。

设置DataGrid1显示内容与模式,右击窗体上的DataGrid1控件,选"检索字段",选[Y],完成。

至此,你启动窗体,就可以在DataGrid1控件里看到效果了。

可以右击窗体上的DataGrid1控件,选“属性”,进一步作设置,比如:“允许添加”、“允许删除”。

四.常用操作数据库的命令:

1.刷新记录集:

Adodc1ConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=" & AppPath & "\数据库mdb;Persist Security Info=False" ‘连接数据库文件

Adodc1RecordSource = "学生基本信息" ‘连接数据表

Adodc1Refresh ‘刷新记录集,这个不能漏

2.移动记录:

Adodc1RecordsetMoveFirst ‘记录指针移动到第1条记录

Adodc1RecordsetMoveNext ‘记录指针移动到下1条记录

Adodc1RecordsetMoveLast ‘记录指针移动到最后1条记录

Adodc1RecordsetMovePrevious 记录指针移动到前1条记录

注意:上面执行Adodc1Refresh后,如果数据表非空,就自动将记录指针指向第1条记录。

3.编辑更新数据:

首先将记录移动到需要编辑更新的记录,当然在DataGrid1里可以直观地进行修改编辑,也可以用命令;

Adodc1RecordsetFields ("姓名") = “王伟” ‘用“王伟”更新当前记录的“姓名”字段

Adodc1RecordsetUpdate ‘执行更新,注意这一步不能漏

当然,你可以对某条记录的若干个字段进行更新后,再一次进行Update

4.添加记录:

Adodc1RecordsetAddNew ‘在数据表的末尾添加一条空记录(所有字段为空)

说明:如果用命令要增加一条记录信息,通常:

1)先用AddNew

2)然后用:

For i = 0 To Adodc1RecordsetFieldsCount - 1

Adodc1RecordsetFields(i) = 内容i

Next i

3)最后用:Adodc1RecordsetUpdate

5.删除记录:

首先移动到你要删除那条记录,然后执行:Adodc1RecordsetDelete

五.关于SQL语句在连接数据表时的一些基本用法:

前面介绍用Adodc控件连接好数据库文件后,要设置其RecordSource来连接数据表,即:Adodc1RecordSource = "学生基本信息"

其实RecordSource属性,可以使用SQL语法,常用Select语句格式如下:

Select 字段列表 From 数据表名 [Where …] [Order By …]

其中:

字段列表– 是指返回的记录,包含哪些字段,字段名之间用逗号分隔

数据表名 -- 是指从哪个数据表返回信息

例如1:

Adodc1RecordSource = "Select 学号,姓名 From 学生基本信息"

例如2:

Adodc1RecordSource = "Select From 学生基本信息"

例2的结果与Adodc1RecordSource = "学生基本信息"相同。其中“”表示所有字段。

Where子句– 根据条件筛选记录

Order By 子句– 设置排序

例如3:

Adodc1RecordSource = "Select From 学生基本信息 Where 性别=’女’"

仅返回女生记录。

例如4:

Adodc1RecordSource = "Select From 学生基本信息 Where 学号>’300’ And性别=’男’"

仅返回学号大于“300”的男生记录。

例如5:

Adodc1RecordSource = "Select From 学生基本信息 Order By 学号"

按照学号从小到大(升序)的次序,返回记录。

例如6:

Adodc1RecordSource = "Select From 学生基本信息 Order By 学号/D"

按照学号从大到小(降序)的次序,返回记录。

注意:/D表示从大到小,/A表示从小到大,/A是缺省表示。

关于SQL语法,可以到以下网址查询并运用,非常有价值:

http://wwww3schoolcomcn/sql/

六.小技巧:

在使用Adodc1的时候,有一些值得注意的细节:

1.关于Adodc1控件的Eof、Bof属性

Eof – 返回数据表(或返回的记录集)记录指针是超出表尾

Bof – 返回数据表(或返回的记录集)记录指针是超出表头

怎么理解呢?假设你的数据表只有一条记录,当你一开始使用了:

Adodc1Refresh

后,这时记录指针指向第1条也是唯一的1条记录,这时候Adodc1的Eof和Bof属性都为False(记录指针既没有超出表尾也没有超出表头),如果这时候使用移动到下一条记录命令:

Adodc1RecordsetMoveNext

那么,Eof为True,Bof 为False。然后,使用命令

Adodc1RecordsetMovePrevious ‘移动到前一条记录

这时,记录指针指向第1条也是唯一的1条记录,Eof为False,Bof 为False。然后,使用命令

Adodc1RecordsetMovePrevious ‘移动到前一条记录

这时,指针向前超出表头,即:Eof为False,Bof 为True。

特别的情况,假设你的数据表没有任何记录,当你一开始使用了:

Adodc1Refresh

这时,Eof为True,Bof 为True。

通常使用这两个属性来判断数据表(或返回的记录集)是否为空:

1)有时候一些数据表一开始可能是空表,即没有记录,但是我们又不知道,通常如下编写代码:

Adodc1Refresh

If Adodc1RecordsetEOF And Adodc1RecordsetBOF Then

‘编写当不存在记录时对数据表操作的代码

Else

‘编写当存在记录时对数据表操作的代码

End If

2.关于空字段的操作:

我们经常需要将找到的某记录的某个字段值,赋予变量,例如

Dim XB As String

Adodc1ConnectionString = "Provider=MicrosoftJetOLEDB40;Data Source=" & AppPath & "\数据库mdb;Persist Security Info=False"

Adodc1RecordSource = "Select From 学生基本信息 Where 姓名=’张飞’"

Adodc1Refresh

XB = Adodc1RecordsetFields("性别")

这时,如果该记录的"性别"字段里没有内容,将会出错误提示,所以,我们往往在命令中使用函数IsNull进行判断:

If Not IsNull(Adodc1RecordsetFields("性别")) Then

XB = Adodc1RecordsetFields("性别")

EndIf

最后,Adodc控件不仅可以连接本地数据库,还可以连接远程数据库,使用几乎与本地数据库一样。

大概想到的就是这些,仅供参考,有不正确的地方请指正。

1、前言

MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL 数据库的程序,特别是与PHP更是黄金组合,运用十分广泛。

由于MySQL是多平台的数据库,它的默认配置要考虑各种情况下都能适用,所以在我们自己的使用环境下应该进行进一步的安全加固。作为一个MySQL的系统管理员,我们有责任维护MySQL数据库系统的数据安全性和完整性。

MySQL数据库的安全配置必须从两个方面入手,系统内部安全和外部网络安全,另外我们还将简单介绍编程时要注意的一些问题以及一些小窍门。

2、系统内部安全

首先简单介绍一下MySQL数据库目录结构。MySQL安装好,运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。如果我们用MySQL源码包安装,而且安装目录是/usr/local/mysql,那么数据目录一般会是/usr/local/mysql/var。数据库系统由一系列数据库组成,每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录,各数据库表分别以数据库表名作为文件名,扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。

MySQL的授权表给数据库的访问提供了灵活的权限控制,但是如果本地用户拥有对库文件的读权限的话,攻击者只需把数据库目录打包拷走,然后拷到自己本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机的安全性是最首要的问题,如果主机不安全,被攻击者控制,那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件的安全性,也就是权限设置问题。

从MySQL主站一些老的binary发行版来看,321xx版本中数据目录的属性是775,这样非常危险,任何本地用户都可以读数据目录,所以数据库文件很不安全。322xx版本中数据目录的属性是770,这种属性也有些危险,本地的同组用户既能读也能写,所以数据文件也不安全。323xx版本数据目录的属性是700,这样就比较好,只有启动数据库的用户可以读写数据库文件,保证了本地数据文件的安全。

如果启动MySQL数据库的用户是mysql,那么象如下的目录和文件的是安全的,请注意数据目录及下面的属性:

shellls -l /usr/local/mysql

total 40

drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin

drwxrwxr-x 3 root root 4096 Feb 27 20:07 include

drwxrwxr-x 2 root root 4096 Feb 27 20:07 info drwxrwxr-x 3 root root 4096 Feb 27 20:07 lib drwxrwxr-x 2 root root 4096 Feb 27 20:07 libexec drwxrwxr-x 3 root root 4096 Feb 27 20:07 man drwxrwxr-x 6 root root 4096 Feb 27 20:07 mysql-test drwxrwxr-x 3 root root 4096 Feb 27 20:07 share drwxrwxr-x 7 root root 4096 Feb 27 20:07 sql-bench drwx------ 4 mysql mysql 4096 Feb 27 20:07 var

shellls -l /usr/local/mysql/var

total 8

drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql

drwx------ 2 mysql mysql 4096 Feb 27 20:08 test

shellls -l /usr/local/mysql/var/mysql

total 104

-rw------- 1 mysql mysql 0 Feb 27 20:08 columns_privMYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_privMYI

-rw------- 1 mysql mysql 8778 Feb 27 20:08 columns_privfrm

-rw------- 1 mysql mysql 302 Feb 27 20:08 dbMYD

-rw------- 1 mysql mysql 3072 Feb 27 20:08 dbMYI

-rw------- 1 mysql mysql 8982 Feb 27 20:08 dbfrm

-rw------- 1 mysql mysql 0 Feb 27 20:08 funcMYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 funcMYI

-rw------- 1 mysql mysql 8641 Feb 27 20:08 funcfrm

-rw------- 1 mysql mysql 0 Feb 27 20:08 hostMYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 hostMYI

-rw------- 1 mysql mysql 8958 Feb 27 20:08 hostfrm

-rw------- 1 mysql mysql 0 Feb 27 20:08 tables_privMYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 tables_privMYI

-rw------- 1 mysql mysql 8877 Feb 27 20:08 tables_privfrm

-rw------- 1 mysql mysql 428 Feb 27 20:08 userMYD

-rw------- 1 mysql mysql 2048 Feb 27 20:08 userMYI

-rw------- 1 mysql mysql 9148 Feb 27 20:08 userfrm

如果这些文件的属主及属性不是这样,请用以下两个命令修正之:

shellchown -R mysqlmysql /usr/local/mysql/var

shellchmod -R go-rwx /usr/local/mysql/var

PHP教程安装PHP

安装PHP

本章将按下列步骤编译安装以下软件:

Apache v134 -- 世界上最流行的Web服务器。

gcc v281 -- 来源于GNU的C和C++编译器。

MySQL v32216b-gamma -- 世界范围内许多人使用的数据库。

PHP v3011 -- 本书所主要介绍的软件。从http://wwwphpnet(或此站点的镜象站点)直接下载可以得到较新的版本。本章的其它步骤仍然适用。

expact -- 用于读取和处理XML文档的函数库。

phplib -- 用于进行会话管理的PHP函数库。

libiodbc -- 主要用于存取在非UNIX计算机中数据库的ODBC函数库。

MyODBC -- PHP、iODBC和MySQL之间的函数库。

即便如此,本章也并不是介绍编译应用程序所需要的那些指令,而只是简单的进行描述。总之,本书的重点是介绍PHP语言,而不是C语言。每一个应用程序的编译对我来说都十分清楚,希望每个读者也能没有困难的进行编译。假如你确实碰到了一些问题,可以在某个IRC频道中有礼貌的询问,或者可以尝试使用新闻组(可以从http://wwwdejanewscom访问)得到帮助来解决问题。然而,最好的帮助还是来自http://wwwphpnet 上的PHP邮件列表。

在开始编译过程之前,让我们先讨论一下如何从错误中恢复。在得到有关错误的帮助以后,可以采用以下的命令重新初始化源码目录:

rm configcache--几乎所有的Linux应用程序都使用configure命令来检查自己的系统,以寻找有关如何剪裁编译过程的信息。检查的结果将存贮在一个名为configcache的文件中。如果移走此文件,将迫使配置程序从头开始重新检查系统。

make distclean--所有的用C语言编写的Linux应用程序都是用make程序编译的。make程序会寻找每一个源文件,以确认是需要编译还是已经编译过的。make distclean命令可以“重置”所有的源程序,以便能重新编译它们。

make clean--有的应用程序不支持make distclean命令,而用make clean命令来代替。make clean命令“重置”所有的源程序,以便能重新编译它们。

即使要安装的一些应用程序不支持以上的每个命令,但是试一下这些命令也不会有什么害处。

注意:Red Hat v52使用glibc库。如果用户从互联网中下载或更新在本章中安装的程序时,必须知道glibc的信息。使用者可以使用rpm -q glibc命令来查出已经安装的glibc库的版本号。在作者的系统中,使用rpm -q glibc命令将显示glibc-20729。

21 基本概念

也许读者以前从没有编译过Linux应用程序,在这里介绍一些基本概念,以便在出现问题时有可能诊断出问题所在。

tar

tar,即tape archiver,它可以把几个文件组合成一个文件,并可以选择是否进行压缩。这个命令过去通常用来进行备份,以便使数据存储在磁带中。当tar文件被压缩时,它们有一个gz的后缀;当tar文件没有压缩时,它们有一个tar的后缀。

gcc

gcc 是GNU的C编译器。它的工作是把人可以看懂的源代码文件编译成机器可以读懂的目标文件。C源文件通常有c的后缀名,目标文件通常有o的后缀名。如果编译工作不能正常进行,就是碰到了一个编译期的错误,或者说:语法错误。在大多数情况下,不彻底的编译通常是编译器找不到一个或几个包含文件而产生的。包含文件都有一个h的扩展名,通常用来定义不同的系统信息,以及将多个不同的c文件所共有的信息收集在一起。

make

make是一个常用的工具程序,是用来帮助进行编译的。它的工作是用来只编译那些还没有编译过的源文件。编译c文件将生成一个o文件,如果c文件比o文件更新,也就是说到上次编译之前,源文件被编辑过,那么make将会重新编译c文件。make指令一般是寻找一个Makefile文件,在这个文件中包含有一个或多个能执行的目标,例如,make clean会告诉make执行清除目标。

ld

ld是GNU的链接程序。它的工作是把所有的目标文件和库链接起来,创建一个单一的可执行文件。幸运的是,基本上不用手工运行这个程序,因为Makefile将会考虑到所有的编译细节。

ldconfig

ldconfig会为在多个库目录(在/etc/ldsoconf中指定)中寻找共享库。共享库常被多个的应用程序使用,它们的文件名中的某个地方有so,例如,libqtso142是一个共享库。在编译完毕之后,有可能需要在/etc/ldsoconf文件中增加一个目录,并且运行ldconfig -v命令。

/configure

configure将会在计算机中寻找一些关键信息,例如,安装的是哪一种C编译器,包含文件在哪里等等。然后,configure将会按照所用的计算机配置重新修改Makefile文件。应该使用/configure来在当前目录下运行程序,以避免偶然运行$PATH环境变量中的目录下的其他程序。

符号连接

符号连接允许使用者可以为一个已经现有的文件指定另一个不同的名字。例如,使用者有可能想把一个名为libqtso142的文件称为libqtso1。符号连接基本上可以使用户把一个文件复制到另一个不同的目录下面,但事实上并没有真正复制此文件。第二个文件实例只是简单地指向第一个文件实例。使用符号连接至少可以有两点好处,第一点是符号连接可以节省硬盘空间,少到只有16字节;第二点有一点微妙,让我们先看一下一个名为libqtso1且指向libqtso142的符号连接。如果需要升级到libqtso188,该怎么办呢?用户只要简单地改变符号连接,使libqtso1指向libqtso188,而非libqtso142即可。这意味着涉及到libqtso1的程序将自动地使用这个库的新版本。按照惯例,符号连接常用于完整的发布版本号。换句话说,libqtso188和libqtso232应该有两个不同的动态连接(分别为libqtso1和libqtso2)。

22 编译前的准备工作

以下步骤将为系统做好编译前的准备工作。

1 mkdir /usr/local/src -- 我选用/usr/local树作为所安装应用程序的根目录。其他人可能选用/usr/opt、/opt或/var目录。为了更方便的按照本章中的指令操作,请选用/usr/local目录作为根目录。当编译完成以后,用户可以把这些文件复制到不同的目录中。

注意:为了能完成本章中的其它步骤,使用者必须具备root权限。

2 cd /usr/local/src--转到源文件目录下。

3 下载以下文件(可以从http://wwwmtolivecom/phpbook站点下载),或者从本书随机附带的光盘中,复制这些文件到/usr/local/src目录下:

apache_134targz

gcc-281targz

mysql-32216b-gammatargz

php-3011targz

expattargz

phplibtargz

libiodb-2503

myodbc-25024-src

4 使用tar命令解压缩以上文件。tar的x选项为解开选项,v选项将在屏幕上显示文档中解出来的文件名,z选项为解压缩选项,f选项用于在命令行中指定tar文件名。

tar xvzf apache_134targz

tar xvzf gcc-281targz

tar xvzf mysql-32216b-gammatargz

tar xvzf php-3011targz

tar xvzf expattargz

tar xvzf phplibtargz

5 gcc -v

确定系统中现有gcc的版本。如果你的系统不是v2723,在下面的操作步骤中采用你的gcc版本号替换v2723。

6 cp `which gcc` /usr/bin/gcc-2723

如果需要,把现有的gcc备份,以便以后使用。Linux的另一个优点是可以很容易在目录下存储一个程序的多个版本。

7 httpd -v

确定系统中的Apache的版本号。如果你的系统中的Apache不是v134,在下面的操作步骤中使用你的版本号替换v134。

8 mv `which httpd` /usr/sbin/httpd-134

如果需要,把现有的Apache备份,以便以后使用。

23 编译C编译器gcc

使用者应该安装、编译程序的第一个程序就是C编译器。随Red Hat v52附带的C编译器是gcc v2723,由于它的版本比较低,以至于不能正确的编译PHP。然而gcc v273可以用来编译版本较高的gcc v281。

编译新版本的gcc需要执行:

1 cd /usr/local/src/gcc-281

转到gcc的顶级目录下。

2 /configure -prefix=/usr/local/gcc

运行配置程序,强制安装程序在后面的安装过程中使用/usr/local/gcc作为gcc的安装目录。

3 make bootstrap LANGUAGES="c c++" BOOT_CFLAGS="-g -02"

编译新的C和C++编译器。

4 make install LANGUAGES="c c++" BOOT_CFLAGS="-g -02"

安装新的C和C++编译器。

5 mv /usr/local/gcc/bin/gcc /usr/local/gcc/bin/gcc-281

把新的gcc编译器重新命名,使它的名字中含有版本号。

6 ln -s \

/usr/local/gcc/bin/gcc-281 \

/usr/bin/gcc-

给新编译过的gcc可执行文件创建一个符号连接/usr/bin/gcc。

7 gcc -v

显示gcc的版本号。如果编译和安装都正常的话,将显示v281。

23 编译MySQL

现在来编译MySQL。在编译工作完成之后,就可以使用MySQL的应用程序来测试安装。

1 cd /usr/src/mysql-32216a-gamma

转到MySQL的顶级目录下。

2 /configure --prefix=/usr/local/mysql

运行配置程序,强制安装程序在后面的安装过程中使用/usr/local/mysql作为MySQL的安装目录。

3 make

编译MySQL。

4 make install

安装MySQL。

5 echo "/usr/local/mysql/lib/mysql" >> /etc/ldsoconf

将MySQL库所在的目录添加进配置文件中。这样,当Linux启动或者执行ldconfig命令时,将会在该配置文件中的目录里搜索库文件。

6 ldconfig -v | grep libmysqlclient

ldconfig命令能读取/etc/ldsoconf文件中列出的目录,并对在那些目录里找到的库文件进行缓冲。grep命令在ldconfig命令的大量输出结果中查找MySQL库文件,并限定文本以类似下面方式进行显示:

libmysqlclientso6 => libmysqlclientso600

7 echo "/usr/local/mysql/bin/safe_mysqld > /dev/null &" >> /etc/rcd/rclocal

将MySQL启动指令添加到/etc/rcd/rclocal文件中,这样每次启动Linux后就会自动运行MySQL。

8 /scripts/mysql_install_db

初始化数据库。

9 /usr/local/mysql/bin/safe_mysqld > /dev/null &

启动MySQL服务器作为后台程序,为了测试安装,MySQL服务器必须启动。

10 ln -s \

/usr/local/mysql/bin/mysql \

/usr/bin/mysql

我比较喜欢在/usr/bin目录下为安装目录建立符号链接。这一方法减少了PATH环境变量中的目录数量,还可以将不希望其他人运行的MySQL工具程序隐藏起来,(例如,mysqladmin命令)。另一方法是将命令PATH="$PATH:/usr/local/mysql/bin"放在/etc/profile文件中。以上两种方法都很可以采用。

11 ln -s\

/usr/local/mysql/bin/mysqlshow \

/usr/bin/mysqlshow

该指令是让一般用户都可以运行mysqlshow命令。

24 测试MySQL

在继续Apache和PHP编译之前,首先来测试MySQL的安装是否成功。正式发布的MySQL带有许多有用的工具,这里我们只使用mysql和mysqlshow命令来进行测试。(如果对数据库不熟悉,请不用担心,诸如用户、表、记录等数据库的概念将在第六章“数据库和SQL”中加以介绍。)

mysqladmin的作用是建立和删除数据库、检查SQL的状态,以及其他一些用途。首先,通过检查版本号以确认是否已经正确安装了MySQL:

>PATH="usr/local/mysql/bin:$PATH"

>mysqladmin version

Ver 78 Distrib 32216a-gamma, for pc-linux-gun on i686 TCX Datakonsult AB, by Monty

Server version 32216a-gamma

Protocol version 10

Connection Localhost via UNIX socket

UNIX socket /tmp/mysqlsock

Uptime: 2 hours 30 min 39 sec

Threads: 1 Questions: 7 Slow queries: 0

Opens: 6 Flush tables: 1 Open tables: 2

可以用以下命令观看mysqladmin的所有功能

mysqladmin --help | less

也许mysqlshow是更让人激动的工具,它能够列出数据库、表和字段名,如下所示:

清单21 mysqlshow--显示数据库,表和字段名清单

Page 18(第13行)-19(倒数第10行) , 清单 21

最后要介绍的MySQL工具是mysql,这个程序将深入到MySQL的中心,并且可以使你可以立刻在Linux命令行提示下执行SQL语句。在shell模式下运行mysql。

Page 19(倒数第5行)-20(倒数第5行)

小心:设置密码要使用password()函数。如果需要进一步了解,请查阅MySQL文档。

小心:在系统进入正常工作模式的时候,请选用一个比“password”更好的root密码。

25 编译iODBC和MyODBC

iODBC是一个实现开放性数据库互连(Open Database connectivity)协议的函数库。它主要用于连接运行于Microsoft Windows的数据库引擎。

1 cd /usr/local/src/libiodbc-2503

转到iODBC目录。

2 /configure \

--prefix=/usr/local/iodbc \

--with-iodbc-inidir=/usr/local/etc

运行配置程序,并强制设置iODBC为安装到目录/usr/local/iodbc下。此外,应确认odbc的初始化文件为/etc/odbcini。

3 make

4 make install

把库文件复制到目录/usr/local/iodbc/lib下,并且把包含文件复制到目录/usr/local/iodbc/include下。

5 cd /usr/local/src/myodbc-25024

转到MyODBC目录下。

6 /configure \

--prefix=/usr/local/myodbc \

--with-mysql-sources=/usr/local/mysql-32216a-gamma \

--with-odbc-ini=/etc/odbcini \

--with-iodbc=/usr/local/iodbc

运行MyODBC配置程序。

7 make

8 make install

把库复制到目录/usr/local/myodbc/lib下。

26 编译PHP

编译PHP比编译以前的应用程序更复杂,这是因为编译PHP事实上是expat、Apache和PHP的组合。编译的结果将生成一个带有PHP的Apache版本。为了要编译PHP,可以采用以下步骤:

1 cd /usr/local/src/expat

转到expat目录。

2 make

编译expat源文件。

3 把以下命令加到Makefile文件中,必须保证在输入ar和ralib之前使用的是Tab键。

libexpata: $(OBJS)

ar -rc $@ $(OBJS)

ranlib $@

4 make libexpata

把expat目标文件组合成库文件。

5 mv libexpata /usr/local/lib

PHP配置文件在/usr/local/lib目录下寻找libexpata文件。把libexpata文件移到PHP配置文件已知的目录下,可以为以后的操作减少麻烦。

6 cd /usr/local/src/php-3011

转到PHP的顶级目录下。

7 mkdir /usr/local/include/xml

确认/usr/local/include/xml目录是存在的。

8 ln -s \

/usr/local/src/expat/xmltok/xmltokh \

/usr/local/include/xml/xmltokh

当能创建符号连接时,为什么还要复制呢?

9 ln -s \

/usr/local/src/expat/xmlparseh \

/usr/local/include/xml/xmlparseh

这是PHP为了能够正确地被编译所需要的另一个包含文件。

10 cd /usr/local/src/apache_134

转到Apache的顶级目录下。

11 /configure -prefix=/usr/local/apache

运行配置程序,强制设置Apache安装目录为/usr/local/apache。

12 cd /usr/local/src/php-3011

转到PHP的顶级目录下。

13 /configure \

--with-apache=/apache_134 \

--with-iodbc=/usr/local/iodbc \

--with-mysql=/usr/local/mysql \

--with-xml

运行配置程序,并且告诉配置程序支持Apache、MySQL和XML。

14 make

编译PHP源文件。

15 make install

安装已编译的文件。PHP库文件会被放在Apache的模块目录下,这样可以在编译Apache时能找到它们。

16 cd /usr/local/src/apache_134

转到Apache的顶级目录下。

17 /configure \

--prefix=/usr/local/apache \

--active-module=src/modules/php3/libphp3a

再一次配置Apache,这次告诉Apache要加载PHP模块。

18 make

编译Apache源文件。

19 make install

安装已编译的文件。

20 mv \

/usr/local/apache/bin/httpd \

/usr/local/apache/bin/httpd-134

重新命名新创建的httpd可执行文件,这样就能够安装多种版本。

21 ln -s \

/usr/local/apache/bin/httpd-134 \

/usr/sbin/httpd

建立一个指向新的可执行文件的符号链接。

22 httpd -v

证实可以访问新的可执行文件。该命令的执行结果将显示版本134,而且建立日期也应该正确无误。

23 编辑/usr/local/apache/conf/httpconf文件,搜索AddType并确认下列行未加注释。

AddType application/x-httpd-php3 phtml

AddType application/x-httpd-php3 php3

AddType application/x-httpd-php3-source phps

24 接着编辑/usr/local/apache/conf/httpconf文件,搜索DirectoryIndex并将indexphp3放在行尾。

25 创建一个名为/usr/local/local/php3ini的文件,该文件应包含如下的命令行:

include_path=:/usr/local/apache/php/

auto_prepend_file=/usr/local/apache/php/prependphp3

track_vars = on

magic_quotes_gpc = on

sendmail_path /usr/sbin/sendmail -t

26 ln -s \

/usr/local/src/php-3011/doc/manualhtml \

/usr/local/src/php-3011/doc/indexhtml

建立一个符号链接,这样绝大多数Web浏览器就会正确地自动显示PHP文件起始页。

27 ln -s \

/usr/local/src/php-3011/doc \

/usr/local/apache/htdocs/phpdocs

建立一个符号链接,这样就可以通过http://localhost/phpdocs/, 来访问PHP文档。

28 创建一个叫做/usr/local/apache/htdocs/robotstxt的文件,这样就可避免搜索引擎为PHPLIB,phpMyAdmin和PHP文件建立索引,新创建的文件应包括如下设置行:

#robotstxt for (hostname)

User-agent

Disallow: /phpdocs/

Disallow: /php/

Disallow:/phpMyAdmin/

27 安装PHPLIB

在阅读第15章“处理并发的访问”之前,应先安装PHPLIB,可以按照下列步骤进行安装:

1 以root用户或其他任何可以在/usr/local/apache目录下写文件的用户注册。

2 cd /usr/local/apache/

在开始下载文件之前,进入到Web服务器的顶级目录下。

3 从如下Web网址下载最新版本的文件,注意gz后缀的文件名,以免它的文件名phplibtargz被改动。

http://phplibshonlinede/

4 tar xv2f phplibtargz

解压缩PHPLIB模块。

5 编辑/usr/local/lib/php3ini文件,应包括下列设置内容:

include_path=:/usr/local/apache/phplib-61/php

auto_prepend_file = /usr/local/apache/phplib-

61/php/prependphp3

track_vars = on

magic_quotes_gpc = on

sendmail_path /usr/sbin/sendmail -t

6 建立一个名为poe_sessions的mysql数据库。我一般使用phpMyAdmin,如果愿意,也可以使用SQL命令创建数据库。

7 cd /usr/local/apache/phplib-61/stuff

进入建表目录下。

8 mysql php_book --user=root --password <

create_databasemysql

创建PHPLIB所需要的数据库表。

9 使用以下值在mysql数据库表中增加一条新记录:

host: %

password: <-- no password

select_priv: Yes

insert_priv: Yes

update_priv: Yes

delete_priv: Yes

for users named "kris","user01",and "user02"

注意:也可以使用如下SQL语句:

INSERT INTO

user

(

Host

,User

,Password

,Select_priv

,Insert_priv

,Update_priv

,Delete_priv

)

VALUES (

'%'

, 'kris'

, ''

, 'Y', 'Y', 'Y', 'Y'

)

10 使用以下值在mysql数据库的db表中增加一条新记录:

host: %

db: poe_sessions

select_priv: Yes

insert_priv: Yes

update_priv: Yes

delete_priv: Yes

for users named "kris","user01",and "user03"

注意:也可以使用如下SQL程序。

INSERT INTO

db

(

Host

,Db

,User

,Select_priv

,Insert_priv

,Update_priv

,Delete_priv

)

VALUES (

'%'

, 'poe_sessions '

, 'kris'

, 'Y', 'Y', 'Y', 'Y'

)

11 /usr/local/mysql/bin/mysqladmin -u root -p reload

重新装载MySQL权限表。

12 在php_book数据库中创建两个PHPLIB已认证的用户(user01和user02),可以使用如下SQL语句:

INSERT INTO

auto_user

(

uid

,username

,password

,perms

) VALUES (

'c14cbf141ab1b7cd009356f555b1234'

,'user01'

,'test'

,'admin'

)

INSERT INTO

auth_user

(

uid

,username

,password

,perms

) VALUES (

'c14cbf141ab1b7cd009356f555b3241'

,'user02'

,'test'

,'admin'

)

13 mv\ /use/local/apache/phplib-61/pages \

/use/local/apach/htdocs

将演示子目录置于Web服务器的根目录下,这样就可以用浏览器访问它。

14 编辑文本文件/usr/local/apache/htdocs/robotstxt,使它包括如下内容:

Disallow: /phplib/

15 使用Web浏览器访问http://localhost/phplib/。将会看到如图21所示页面。

Page 29 图21

图21 重新装载两次以后出现的PHPLIB演示页面

28 测试Linux环境下的ODBC

对所装软件进行基本测试是很重要的,特别是需要手工编辑配置文件时。如下的测试可确保你的MySQL驱动程序运行正常,并且编译的iODBC库文件也是正确无误的。

1 使用清单21所列的内容,建立一个名为/usr/local/etc/odbcini的文件。

清单 22 /usr/local/etc/odbcini- 系统ODBC 配置文件

;

;odbcini

;

[ODBC Data Sources]

mysql = mysql

[php_book]

driver = /usr/local/myodbc/lib/libmyodbcso

host = localhost

database = mysql

user = root

2 cd /usr/local/src/libiodbc-2503/samples

3 /odbctest

运行ODBC测试程序。

4 DSN=mysql;PWD=password

告诉测试程序要访问的数据源。

5 select host,user from user

在提示符下执行一个SQL语句,如果有回应,说明iODBC和MySQL已经可以使用了。

现在,在计算机中已经安装好了ODBC,由于它的安装步骤不太清晰而且文档又很少,所以本章中讲述了其安装和测试指令,然而鉴于ODBC主要是一项Microsoft技术,且很少在Linux中用到,所以这里是本书中最后一次有关介绍。

29 总结:

本章讲述了如何获取PHP,及在计算机中进行安装所需要的步骤,编译了内建PHP的特定版本Apache 服务器。同时,还安装了将在第15章“中场四:处理并发访问”中用所到的PHPLIB。

-网络模式设置:

1电信卡,进入《管理连接》-移动网络选项-网络技术。设置成1XEV。

2联通3G(WCDMA) sim,设置成GSM/UMTS,网络模式设置成 3G。

3移动/联通 2G卡,设置成GSM/UMTS,网络模式设置成2G。

--收发彩信设置:

进入拨号界面,按黑莓键-选项-智能拨号,将国家(地区)代码设置成未知即可。

--上网设置:

使用电信3G UIM卡和联通3G(WCDMA) sim卡时,无需进行其他设置,直接插卡即可上网!如出现无法上网的情况,请按照以下教程进行设置。

修改接入点:

1按绿色拨号键,进去拨号界面。

1输入##182838或者##000000,再按拨号键,进入工程模式, 这点很重要。

2在最下方,把改为或者,在SIP Password:输入vnetmobi。

==> 建议更改为,9630自带的浏览器是 只支持wap,经测试,如果改为ctnet的话。

是无法通过互联星空来上网的

==> 如果想安装除外的 BB自带浏览器需要导入Service Book。

3黑莓键,点,手机会自动关机,然后需要手动开机,开机会有个几分钟

4然后就可以上网了

导入Service Book安装黑莓自带浏览器方法详解:

1手机主界面进入《选项》-高级选项-服务预定。

29530:按黑莓键-显示键盘-按住“!?!123”键直至该键锁定(左上角多了一把小锁),依次输入4、2、,

成功后弹出“Legacy SB Restore Enabled”,连接PC。

39630:按住alt键,依次输入SBEB,成功后弹出“Legacy SB Restore Enabled”,连接PC。

4打开DM桌面管理器,找到“备份/恢复”,点击“恢复”找到要导入的Service Book文件《电信服务预定ipd》,确定。

5提示恢复完成。

6主屏幕会出现两个浏览器,一个为“浏览器”,一个为“互联星空”,前者为NET上网模式,后者为WAP。

我也是前两天才弄明白的,现在告诉你吧注意:一定要打开数据开关还有GPS首先点击主屏天气显示的图标(点击的时候要在靠近上方的位置),这时天气图标会变成全屏,然后点击菜单键(三角形键)进入设置-更改城市之后输入你所在的位置(输入的时候切记不要输入省份和地区城市直接输入你所在位置)比如:吴桥,这时下方就会弹出你所在的位置名称,点击确定就可以了。

1mysql用户创建:

shell mysql --user=root mysql

mysql GRANT ALL PRIVILEGES ON TO monty@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;

mysql GRANT ALL PRIVILEGES ON TO monty@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;

mysql GRANT RELOAD,PROCESS ON TO admin@localhost;

mysql GRANT USAGE ON TO dummy@localhost;

这些GRANT语句安装3个新用户:

monty

可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令'something'做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。

admin

可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。

dummy

可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为'N'--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。

2通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):

shell mysql --user=root mysql

mysql INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('stupid'));

mysql INSERT INTO user (Host,User,Password) VALUES('serverdomain','custom',PASSWORD('stupid'));

mysql INSERT INTO user (Host,User,Password) VALUES('','custom',PASSWORD('stupid'));

mysql INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)

VALUES ('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');

mysql INSERT INTO db

(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)

VALUES ('','expenses','custom','Y','Y','Y','Y','Y','Y');

mysql INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)

VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');

mysql FLUSH PRIVILEGES;

3改动密码时有时候会遇到忘记先前的密码,这时可以采用以下方式:

修改你的myini 配置文件,

在里面的 [mysqld]节中某处加入下面的一行

skip-grant-tables

然后保存,重启 mysqld 服务,这样你可以使用任何用户名以超级管理员的身体登录 MySQL 服务了。

然后转到mysql数据库中修改user表:

update user set password=PASSword('1234') where user='root';

一定记住要用password函数,否则将来将要输入的密码是‘1234’的密文。

最后删除上面所添中的内容,重启服务。

另外,如果可以从本机或其它机器上找到可以正常使用的MySql数据库,那么也可拷贝其mysql库中的文件名为user的相关文件,覆盖忘记密码的数据库中的同名文件,这样也能以被拷贝者的账户密码登录。

4如何设置MySql账户使其可以从远程访问服务器

在50版本中,其实有一个图形界面的配置向导工具,在设置root账户密码时,可以选择是否允许其从远程访问。默认情况下是不允许的。

在命令行下,可以有两种大同小异的方法来作此设置:

(1)mysqlGRANT ALL PRIVILEGES ON TO root@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;

mysqlGRANT ALL PRIVILEGES ON TO root@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;

第一句增加了一个root用户授权通过本地机(localhost)访问,密码“something”。

第二句则是使用通配符,授与root用户从任何其它主机发起的访问。

(2)亦可直接使用update语句修改user表:使用root用户或其他用户登录mysql,转到mysql数据库

update user set host='localhost' where user='root';

flush privileges;//只允许root在本机登录

update user set host='%' where user='root';

flush privileges;//允许root远程访问

注意,以上一定要加flush语句。

另外,如果要建新用户,则用grant语句比较方便,记住语句grant总是创建新用户。

5关于MySql的3306端口

一次在服务器上新装5018时,提示3306端口已被占用,强制使用该端口,则发现所连接上的数据库是418版本,始终无法访问到新创建的服务器。后来发现机器上原来装有一个mysql服务器,418版本。

此时,应重新配置新版本的数据库, 将端口设为其他的,如3307,那么在访问时,可以通过加上选项:--port=3307来访问,在net程序中也须将连接字符串添上port=3307,即可。

更多相关免费学习推荐:mysql教程(视频)

解决MySQL访问权限设置的方法:

访问权限设置方法一

用Grant 命令授权,输入的代码如下:

mysql"gt;GRANT ALL PRIVILEGES ON TO system@localhost

IDENTIFIED BY 'manager' WITH GRANT OPTION;应显示:Query OK, 0 rows affected (038 sec)

访问权限设置方法二

对用户的每一项权限进行设置:

mysql"gt;INSERT INTO user valueS('localhost','system',PASSWORD('manager'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

对于32234版本的MySQL,这里共14个"quot;Y"quot;,其相应的权限如下(按字段顺序排列): 权限 表列名称 相应解释 使用范围

select Select_priv 只有在真正从一个表中检索时才需要select权限 表

insert Insert_priv 允许您把新行插入到一个存在的表中 表

update Update_priv 允许你用新值更新现存表中行的列 表

delete Delete_priv 允许你删除满足条件的行 表

create Create_priv 允许你创建新的数据库和表 数据库、表或索引

drop Drop_priv 抛弃(删除)现存的数据库和表 数据库或表

reload Reload_priv 允许您告诉服务器再读入授权表 服务器管理

shutdown Shutdown_priv 可能被滥用(通过终止服务器拒绝为其他用户服务) 服务器管理

process Process_priv 允许您察看当前执行的查询的普通文本,包括设定或改变口令查询 服务器管理

file File_priv 权限可以被滥用在服务器上读取任何可读的文件到数据库表 服务器上的文件存取

grant Grant_priv 允许你把你自己拥有的那些权限授给其他的用户 数据库或表

references References_priv 允许你打开和关闭记录文件 数据库或表

index Index_priv 允许你创建或抛弃(删除)索引 表

alter Alter_priv 允许您改变表格,可以用于通过重新命名表来权限系统 表

如果创建用户时只有select、insert、update和delete权限,则允许用户只能在一个数据库现有的表上实施操作。

下面就可以创建我们要用到的数据库了,我们直接输入 例如:我们要创建数据库名为XinXiKu,可用如下代码:

mysql"gt;create database XinXiKu;应显示:Query OK, 1 row affected (000 sec)

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/shuma/819263.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-09
下一篇2023-08-09

随机推荐

  • 现在黄金卖出去多少钱一克

    2018年国际金融市场波动较往年大,2018年以来黄金原料价格基本在269到275元克之间徘徊。黄金回收价格需要在此基础上减去对应费用,一般是10元每克左右,经济欠发达的地区可能会相对低一些,如果当地回收价格确实太低的话,可以看看贵金属网

    2024-04-15
    13600
  • 唇膏品牌的十大排行榜

    排名在前十的唇膏品牌有:资生堂MOILIP修护润唇膏、伊丽莎白·雅顿经典润唇膏、NIVEA妮维雅天然型润唇膏、Blistex百蕾适小蓝罐、Burt'sBees伯特小蜜蜂润唇膏、曼秀雷敦天然植物润唇膏、Vaseline凡士林玫瑰润唇

    2024-04-15
    24600
  • 娇韵诗清爽控油脂精华露好用吗?

    对于脸部肌肤油脂分泌旺盛的妹纸们来说,肌肤也更容易出现一些常见的问题,油脂会影响人的外貌形象,导致脸上长痘痘,肌肤暗沉,毛孔粗大等问题,所以油皮的妹纸可以使用这款娇韵诗清爽控油脂精华露产品哦!娇韵诗清爽控油脂精华露好用吗?1、产品介绍娇韵诗

    2024-04-15
    25900
  • 推荐一款平价的控油爽肤水

    平价的话就妮维雅的蓝水吧。妮维雅的粉水更侧重于保湿,蓝水则侧重于清洁。妮维雅的产品虽然平价,但是性价比还真是不错,产品效果是实打实的,不花哨,对年轻肌肤是足够用的了。此外,要达到控油和收敛毛孔的效果的话,没有酒精是不可能的。妮维雅这两款水基

    2024-04-15
    11600
  • 伊思红参蜗牛霜怎么用,伊思红参蜗牛霜使用方法

    its skin伊思红参蜗牛霜是目前市场非常受欢迎的产品这一,虽然说通常面霜在使用上面并没有什么太需要注意的,不过品牌的不同也会有一些细节上的差别,以下我将为大家说明its skin伊思红参蜗牛霜的用法。伊思红参蜗牛霜怎么用1、彻底

    2024-04-15
    10300
  • 红伊思蜗牛水乳怎么样

    以下全是我爱听的,希望你能喜欢。1、snowdreams(雪的梦幻)2、river flows in you3、kiss the rain4、三个人的时光5、我曾在那一角落患过伤风6、The mass(弥撒)7、Hello Zepp(电锯惊

    2024-04-15
    10000
  • 碧欧泉蓝钻精华水和紧肤水哪个好

    都好。1、碧欧泉蓝钻精华爽肤水,收敛毛孔,紧致轮廓,让肌肤畅饮深澈补水,舒缓紧绷,平滑修护。2、碧欧泉蓝钻紧肤水主如果收缩毛孔,它含有酒精,会有燥热干爽的觉得能够避免青春痘的滋生,有用抑制细菌的生殖。碧欧泉精华露和精华液的质感不同。精华液的

    2024-04-15
    10400

发表评论

登录后才能评论
保存