oracle数据库update,有没有更好的shell方法或者数据库方法

搜索/var目录下以所有字改称这样试试:母开头的文件

我觉得你应该写一个缓存器,也就是将其数据结构化。先通过循环读取文本数据并格式化,存入你的数据缓存器(可以用5、find /var -user root数组方式实现),然后通过一个update语句循环写入数据库。

fred数据库(fdb格式数据库)fred数据库(fdb格式数据库)


fred数据库(fdb格式数据库)


unix或者linux 不熟悉 不过可以给你一个思路 写一个 ja 程序 或者 shell程序 读取你的数据文件然后循环更新处理如果你需要ja代码 我可以给你写一个然后你做一个shell调用就可以了。如果用linux下的方法,就帮不上忙了

SQL语句update的作用是什么?

1、find的语法:

sql update 语句是什么

b: 代表 512 位元组的区块(如果用户没有指定后缀,则默认为 b)

“UPDATE语句的作用是改变数据库中现有的数据,从而达到更新数据的目的。 现实应用中数据库中的数据改动是免不了的。通常,几乎所有的用户数据库中的大部分数据都要进行某种程度的修改。在SQL 数据库中要想修改数据库记录,就需要用UPDATE语句,UPDATE语句就是为了改变数据库中的现存数据而存在的。 这条语句虽然有一些复杂的选项,但确实是容易学习的语句之一。

-----仅供参考

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值,update语句的写法:

1、UPDATE table_name

2、SET column1=value1,column2=value2,...

3、WHERE column(1)=value(1),column(2)=value(2)...and column(n)=value(n);

4、UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing',WHERE LastName = 'Wilson'。

单独使-gid n 查找属于ID号为 n 的用户组的所有文件。用,使用where匹配字段

set后面,更新字段值,既可以一次一项,也可以一次多项

例:

LastName FirstName Address City

Nilsen Fred Kirkegt 56 Stanger

Raussen Storgt 67

运行下面的SQL将Person表中LastName字段为”Raussen”的FirstName更新为”Nina”:

UPDATE Person SET FirstName = 'Nina' WHERE LastName = 'Raussen'

有20万条数据,使用mysql数据库,insert与update哪个速度快;

直到找到合适的路由建议。如果找不到路由建议就会尝试实例提示的当前的 _state.db 。如果没有提供路由提示,或者实例没有当前数据库状态,那么

insert会更快一点,可以使用 INSERT INTO SELECT FROM < source_table> 高效地将大量行从一个表(例如临时表)。

当你输入数据,并按下 submit 按钮后,这个表单将把数据发送到 submitform.php3 。再由这个 PHP 脚本来处理收到的数据,下面就是 submitform.php3 的代码:

传输到按小方式记录日志的其他表中。按小方式记录日志可以提高语句的性能,减少在事务期间此作填充可用事务日志空间的可能性。INSERT INTO 语句用于向表格中插入新的行。

INSERT INTO 表名称 VALUES (值1, 值2,....)INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')。

Update是一个数据库SQL语法用语,用途是更新表中原有数据,单独使用时使用where匹配字段。Update 语句用于修改表中的数据。UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = -regex:表示使用正则表达式进行匹配。请注意,此命令会和“全路径”进行匹配,也就是说前面要加.,因为输出结果中会有“./”符号。某值。

UPDATE的用法:

更新某一行中的一个列。

我们为 lastname 是 "Wilson" 的人添加 firstname:

UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 。

更新某一行中的若干列。

我们会修改地址(address),并添加城市名称(city):

参考资料来源:

参考资料来源:

Sql2008的对象资源管理器成了浮动型的窗口,请问怎么还原回去?

主路由会 分配 缺省 数据库。

直接键入命令:重置窗口的布局,即可对象资源管理器的浮动型的窗口恢复过来。iling window mar,直译就是“瓦片式窗口管理器”,意译为“平铺式窗口管理器”。所谓的平铺就是指所有的窗口都不会相互重叠,而是自动的被调整大小使得它们能够刚好占满整个屏幕。这和传统的桌面管理器的概念相很大。

SQL 数据库引擎包括数据库引擎(用于存储、处理和保护数据的核心服务)、、全文搜索以及用于管理关系数据和 XML 数据的工具。eporting Servs 包括用于创建、管理和部署表格报表、矩阵报表、图形报表以及自由格式报表的和客户端组件。Reporting Servs 还是一个可用于开发报表应用程序的可扩展平台。

简化T-SQL语句的编写:可声明变量的同时初始化,并进行复合运算,例如:DECLARE @i INT=4+8。

Values子句提供资料列构建函式:可用在单一INSERT陈述式内,同时插入多组值,例如 :

INSERT I");NTO tb VALUES (1, 'Fred'), (2, 'Jim'), (3, 'Sue');

SELECT FROM (VALUES (1, 'Fred'), (2, 'Jim'), (3, 'Sue')) tb(C1,C2)

Merge语句:遵循ANSI SQL 2006 的 Merge定义并加以延伸。比较来源与目的资料后,以一句Merge语句同时完成新增、修改、删除等作。如同单Update 语句扩展应用:一句SQL语句自动含在交互内,通过Merge语句所有更新的资料都包在一个交互内,不像以往需明确定义交互,然后包含多句变更资料的DML语句。

Group By 子句支持 ANSI 标准的 Grouping Sets:简化组合各种群组的语句,并可搭配 Rollup、Cube。例如,以往若要分别呈现群组不同字段,需要写如下的查询:

GO

SELECT OrderID,NULL AS ProductID,SUM(Quantity) AS TOTAL FROM [Order Details]

GROUP BY OrderID

UNION ALL

SELECT NULL AS OrderID,ProductID,SUM(Quantity) AS TOTAL FROM [Order Details]

GROUP BY ProductID

在SQL 2008后,可改成如下的写法:

SELECT OrderID,ProductID,SUM(Quantity) AS TOTAL

FROM dbo.[Order Details]

GROUP BY GROUPING SETS ((OrderID), (ProductID))

参考资料来源:

如何在django中使用多个数据库

-size n[bckw] 查找指定文件大小的文件,n 后面的字符表示单位,缺省为 b,代表512字节的块。

使用多个数据库

New in Django 1.2: Please, see the release notes

大多数其他文档都设使用单一数据库,本文主要讨论如何在 Django 中使用多个数据库。 使用多个数据库,要增加一些步骤。

定义你的数据库

使用多数据库的步是通过 DATABASES 设置要使用的数据库服务。这个 设置用于映射数据库别名和特定的联结设置字典,这是 Django 定义数据库一贯的手法。 字典内部的设置参见 DATABASES 文档。

数据库可以使用任何别名,但是 default 有特殊意义。当没有选择其他数据库时, Django 总是使用别名为 default 的数据库。因此,如果你没有定义一个名为 default 的数据库时,你应当小心了,在使用数据库前要指定你想用的数据库。

DATABASES = { 'default': { 'NAME': 'app_data', 'ENGINE': 'django.db.backends.tgresql_psycopg2', 'USER': 'tgres_user', 'PASSWORD': 's3krit' }, 'users': { 'NAME': 'user_data', 'ENGINE': 'django.db.backends.mysql', 'USER': 'mysql_user', 'PASSWORD': 'priv4te' } }

如果你尝试访问 DATABASES 设置中没有定义的数据库, Django 会抛出一个 django.db.utils.ConnectionDoesNotExist异常。

同步你的数据库

syncdb 管理命令一次只作一个数据库。缺省情况下,它作 default 数据库。但是加上 --database 参数,你可以让 syncdb 同步不同的 数据库。所以要同步我们例子中的所有数据库的所有模型可以使用如下命令:

$ ./ma.py syncdb

$ ./ma.py syncdb --database=users

如果你不是同步所有的程序到同一个数据库中,你可定义一个 数据库路由 来为指定的模型实施特定的控制 策略。

如果你要精细地控制同步,那么还有一种方式是修改 sqlall 的输出,手工在 数据库中执行命令,命令如下:

$ ./ma.py sqlall sales | ./ma.py dbshell

使用其他管理命令

其他作数据库的 django-admin.py 命令与 syncdb 类似,他们一次只 作一个数据库,使用 --database 来控制使用哪个数据库。

自动数据库路由

使用多数据库简单的方法是设置一个数据库路由方案。缺省的路由方案确保对象 “紧贴”其原本的数据库(例如:一个对象从哪个数据库取得,就保存回哪个数据库)。 缺省的路由方案还确保如果一个数据库没有指定,所有的查询都会作用于 缺省 数据 库。

你不必为启动缺省路由方案作任何事,因为它是“开箱即用”的。但是,如果你要执行 一些更有趣的数据库分配行为的话,你可以定义并安装你自己的数据库路由。

数据库路由

一个数据库路由是一个类,这个类多有四个方法:

db_for_read(model, hints)

建议 model 对象写作时使用的数据库。

如果一个数据库作可以提供对选择数据库有用的附加信息,那么可以通过 hints 字典提供。详见 下文 。

如果没有建议则返回 None 。

db_for_write(model, hints)

建议 model 对象读作时使用的数据库。

如果一个数据库作可以提供对选择数据库有用的附加信息,那么可以通过 hints 字典提供。详见 下文 。

如果没有建议则返回 None 。

当 obj1 和 obj2 之间允许有关系时返回 True ,不允许时返回 False ,或者没有 意见时返回 None 。这是一个纯粹的验证作,用于外键和多对多作中,两个对象 的关系是否被允许。

allow_syncdb(db, model)

决定 model 是否可以和 db 为别名的数据库同步。如果可以返回 True , 如果不可以返回 False ,或者没有意见时返回 None 。这个方法用于决定一个给定 数据库的模型是否可用。

一个路由不必提供 所有 这些方法,可以省略其中一个或多个。如果其中一个方法被 省略了,那么 Django 会在执行相关检查时跳过相应路由。

提示参数

数据库路由接收的“提示”参数可用于决定哪个数据库应当接收一个给定的请求。

目前,可以提供的提示参数是 实例 ,即一个与读写作相关的对象的实例。 可以是一个已保存的对象的实例,也可以是一个多对多关系中添加的实例。在某些情况下, 也可能没有对象的实例可以提供。路由会检查提示实例是否存在,并相应地决定是否改变 路由行为。

使用< ?php路由

数据库路由使用 DATABASE_ROUTERS 设置来安装。这个设置定义一个类名称 列表,每个类定义一个用于主路由 (django.db.router) 的路由。

主路由用于 Django 分配数据库作。当一个查询想要知道使用哪个数据库时,会提供 一个模型和一个提示(如果有的话),并调用主路由。

一个例子

仅用于示例目的!

这个例子仅用于展示路由如何改变数据库的使用。本例有意忽略了一些复杂的东西以 便于更好的展示路由是如何工作的。

如果任何一个 myapp 中的模型包含与 另一个 数据库中模型的关系时,本例 是无效的。参见 跨数据库关系一节中介绍 的 Django 引用完整性问题。

本例的主/从配置也是有缺陷的:它没有处理延时(比如因为把写作传递给从 数据库耗费时间而产生的查询不一致),也没有考虑与数据库使用策略的交互作用。

class MyAppRouter(object): """ 一个控制 myapp 应用中模型的 所有数据库作的路由 """ def db_for_read(self, model, hints): "myapp 应用中模型的作指向 'other'" if model._meta.app_label == 'myapp': return 'other' return None def db_for_write(self, model, hints): "myapp 应用中模型的作指向 'other'" if model._meta.app_label == 'myapp': return 'other' return None def allow_relation(self, obj1, obj2, hints): " 如果包含 myapp 应用中的模型则允许所有关系 " if obj1._meta.app_label == 'myapp' or obj2._meta.app_label == 'myapp': return True return None def allow_syncdb(self, db, model): " 确保 myapp 应用只存在于 'other' 数据库 " if db == 'other': return model._meta.app_label == 'myapp' elif model._meta.app_label == 'myapp': return False return None class MasterSleRouter(object): """ 一个设置简单主/从定义 的路由 """ def db_for_read(self, model, hints): " 所有读作指向一个随机的从数据库 " return random.cho(['sle1','sle2']) def db_for_write(self, model, hints): " 所有写作指向主数据库 " return '' def allow_relation(self, obj1, obj2, hints): " 允许数据库池中的两个对象间的任何关系 " db_list = ('','sle1','sle2') if obj1._state.db in db_list and obj2._state.db in db_list: return True return None def allow_syncdb(self, db, model): " 显示地放置所有数据库中的模型 " return True

然后在你的设置文件增加如下内容(把 path.to. 替换为你定义路由的模型的路径 ):

DATABASE_ROUTERS = ['path.to.MyAppRouter', 'path.to.MasterSleRouter']

这个设置中,路由的顺序是很重要的,因为查询时是按这个设置中的顺序依次查询的。上 例中, MyAppRouter 先于MasterSleRouter ,因此, myapp 中的模型就 优先于其他模型。如果 DATABASE_ROUTERS 设置中两个路由的顺序变换了, 那么 MasterSleRouter.allow_syncdb() 会优先执行。因为 MasterSleRouter 是 包罗万象的,这样就会导致所有模型可以使用所有数据库。

设置好之后让我们来运行一些代码:

>>> # 从 'credentials' 数据库获得数据 >>> fred = User.objects.get(username='fred') >>> fred.first_name = 'Frederick' >>> # 保存到 'credentials' 数据库 >>> fred.se() >>> # 随机从从数据库获得数据 >>> dna = Person.objects.get(name='Douglas Adams') >>> # 新对象创建时还没有分配数据库 >>> mh = Book(title='Mostly Harmless') >>> # 这个赋值会向路由发出请求,并把 mh 的数据库设置为与 author 对象同样的 >>> # 数据库 >>> mh.author = dna >>> # 这会强制 'mh' 实例使用主数据库... >>> mh.se() >>> # ... 但如果我们重新获取对象,就会从从数据库中获取 >>> mh = Book.objects.get(title='Mostly Harmless')

手动选择数据库

Django 也提供一个可以让你通过代码完全控制数据库使用的 API 。手动定义数据库分配 优先于路由。

为一个 查询集 手动选择一个数据库

你可以在 查询集 “链”中的任何点为 查询集 选择数据库。我们通过在 查询集 上调用 using() 来得到使用指定数据库的另一个 查询集 。

using() 使用一个参数:你想要运行查询的数据库的别名。例如:

>>> # 这会运行在“缺省”数据库上。 >>> Author.objects.all() >>> # 这同样会运行在“缺省”数据库上。 >>> Author.objects.using('default').all() >>> # 这会运行在“ other ”数据库上。 >>> Author.objects.using('other').all()

为 se() 选择一个数据库

在使用 Model.se() 时加上 using 关键字可以指定保存到哪个数据库。

例如,要把一个对象保存到 legacy_users 数据库应该这样做:

>>> my_object.se(using='legacy_users')

如果你不定义 using ,那么 se() 方根据路由分配把数据保存到缺省 数据库中。

把一个对象从一个数据库移动到另一个数据库

当你已经在一个数据库中保存了一个对象后,你可能会使用 se(using=...) 把这个 对象移动到另一个数据库中。但是,如果你没有使用恰当的方法,那么可能会出现意想不 到的后果。

设有如下的例子:

>>> p = Person(name='Fred') >>> p.se(using='first') # (句) >>> p.se(using='second') # (第二名)

在名中,一个新的 Person 对象被保存到 first 数据库中。这时, p 还没有一个主键,因此 Django 执行了一个INSERT SQL 语句。这样就会创建一个 主键,并将这个主键分配给 p 。

在第二句中,因为 p 已经有了一个主键,所以 Django 在保存对象时会尝试在新的 数据库中使用这个主键。如果 second数据库中没有使用这个主键,那就不会有问题, 该对象会到新数据库。

然而,如果 p 的主键在 second 数据库中已经使用过了,那么 second 使用 这个主键的已存在的对象将会被 p 覆盖。

有两种方法可以避免上述情况的发生。,你可以清除实例的主键。如果一个对象没有 主主键,那么 Django 会把它看作一个新对象,在保存到 second 数据库中时就不会 带来数据的损失:

>>> p = Person(name='Fred') >>> p.se(using='first') >>> p.pk = None # 清除主键。 >>> p.se(using='second') # 写入一个全新的对象。

第二种方法是在 se() 方法中使用 force_insert 选项来保证 Django 执行 一个 INSERT SQL:

>>> p = Person(name='Fred') >>> p.se(using='first') >>> p.se(using='second', force_insert=True)

这样可以保证名为 Fred 的人员在两个数据库中使用相同的主键。如果在保存到 second 数据库时主键已被占用,会抛出一个错误。

选择一个要删除数据的数据库

缺省情况下,一个现存对象从哪个数据库得到,删除这个对象也会在这个数据库中进行:

>>> u = User.objects.using('legacy_users').get(username='fred') >>> u.delete() # 会从 `legacy_users` 数据库中删除

通过向 Model.delete() 方法传递 using 关键字参数可以定义在哪个数据库中删除 数据。 using 的用法与 se() 方法中使用这个参数类似。

例如,设我们要把一个用户从 legacy_users 数据库移动到 new_users 数据库 可以使用如下命令:

>>> user_obj.se(using='new_users') >>> user_obj.delete(using='legacy_users')

多数据库情况下使用管理器

在管理器上使用 db_mar() ,可以让管理器访问一个非缺省数据库。

因为 create_user() 是一个管理器方法,不是一个 查询集 ,所以你不能

用 User.objects.using('new扩展资料:_users').create_user() 。( create_user() 方法

只能用于 User.objects 管理器,而不能用于,管理器衍生出的 查询集 。) 解决方法是使用 db_mar() ,就象下面这样:

User.objects.db_mar('new_users').create_user(...)

db_mar() 返回的是绑定到你指定的数据库的管理器的一个副本。

多数据库情况下使用 get_query_set()

如果你在管理器中重载了 get_query_set() ,请确保在其父类中也调用了相同的方法 (使用 super() )或者正确处理管理器中的 _db 属性(一个包含要使用的数据库 名称的字符串)。

例如,如果你要从 get_query_set 方法返回一个自定义 查询集 类,那么你可以 这样做:

class MyMar(models.Mar): def get_query_set(self): qs = CustomQuerySet(self.model) if self._db is not None: qs = qs.using(self._db) return qs

在 Django 管理接口中使用多数据库

Django 的管理接口没有明显支持多数据库。如果想要支持的话你必须写自定义 ModelAdmin 。

重庆大学,东北大学,湖学,这三个怎么比

. :表示当前目录

重庆大学>东北大学与湖学,东北大学与湖学不多。

f: 一般档案

重庆大学是32所副部级高校之一,东北大学与湖学不是。另外我认为重庆比沈阳与长沙好。

对比大陆高校你可以看院士、博士点、硕士点、重点学科、实验室与博士后流动站等的数量(但是规模较大的高校就现在我们建立另外一个 HTML 表单来执行这个任务:占便宜,人文社科为主的高校院士与实验室的数量不占优势)。另外你还可以看分数排名与学位中心的学科评估,或者把各种排名平均一下看。

重庆大学的博士点、硕士点、重点学科(无论是一级重点学科还是二级重点学科)、博士后流动站、排名前5的学科与排名前10的学科的数量都是多的/多的之一;东北大学的排名前3的学科的数量是多的;湖学的院士数量是多的;实验室都是0个(重点实验室都是3个)。

另外,在39个985高校中,只有重庆大学与湖学没有排名前3的学科,而湖学是一个没有排名前5的学科,也是一个进985高校时没有一级重点学科的高校。

SQL语言中修改表中数据的命令是什么?

c 字符设备文件

SQL语言例如,设你有一个作数据库的自定义管理器 User.objects.create_user() 。中修改表中数据的命令是update。

-ipath p,-path p : 路径名称符合 p 的档案,ipath 会忽略大小写

Update 语句用于修改表中原有的数据。单独使用,使用where匹配字段,set后面,更新字段值,既可以一次一项,也可以一次多项。语法:UPDATE 表名称 SET 列名称1 = 新值,...,列名称2 = 新值 WHERE 列名称3 = 某值。

更新某一行中的一个列的例子:将表中LastName是 "Wilson" 的元组的 FirstName改为“Fred”:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 。

更新某一行中的若干列的例子:将表中LastName是 "Wilson" 的元组的Addres改为“Zhongshan 23”City改为“Nanjing”:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'。

SQL中修改表中数据的语句是什么?

Django 就会按次序尝试每个路由,

SQL语言中修改表中数据的命令是update。

Update 语句用于修改表中原有的数据。单独使用,使用where匹配字段,set后面,更新字段值,既可以一次一项,也可以一次多项。语法:UPDATE 表名称 SET 列名称1 = 新值,...,列名称2 = 新值 WHERE 列名称3 = 某值。

更新某一行中的一“Person”表中的原始数据:个列的例子:将表中LastNameif ($last_name == "")是 "Wilson" 的元组的 FirstName改为“Fred”:UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson' 。

更新某一行中的若干列的例子:将表中LastName是 "Wilson" 的元组的Addres改为“Zhongshan 23”City改为“Nanjing”:UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'。 update语法 461333 0 -rwxr--r-- 1 root root 0 Aug 15 16:46 ./f1

其他的没法看,不过下面这句是肯定有问题的,应该连编译都过不了:

p 命名管道(FIFO)

Dim querystring As String = "update 班级信息表 set 班级名称="TextBox1.Text",班级编号="TextBox2.Tefind ./ -name “d.confxt""

Dim querystring As String

querystring = "update 班级信息表 set 班级名称=" & chr(39) & TextBox1.Text & chr(39) & ", 班级编号=" & chr(39) & TextBox2.Text & chr(39)

改成

Dim querystring As String = "update 班级信息表 set 班级名称='" & TextBox1.Text & "',班级编号='" & TextBox2.Text & "'"

PHP如何向MySQL发送数据_MySQL

以下是一个定义两个数据库的 settings.py 代码片断。定义了一个缺省的 PostgreSQL 数据库和一个名为 users 的 MySQL 数据库:

你应该对 HTML 表单比较了解了,下面的一段代码是一个很简单的 HTML 表单:

扩展资料1、想查看当前文件夹及子文件夹里有没有文件名为“abc”的文件

姓 :

use Northwin

名 :

mysql_connect (localhost, username, password);

mysql_select_db (dbname);

mysql_query ("INSERT INTO tablename (first_name, last_name)

VALUES ('$first_name', '$last_name')

print ($first_name);

print ($last_name);

print ("");

print (" 感谢填写注册表 ");

在代码的第三行中的 "username" 和 "password" 分别代表你登陆 MySQL 数据库的账号和密码。在第五行中的 "dbname" 表示 MySQL 数据库的名称。在第十三行中的 "tablename" 是数据库中的一个数据表的名称。

当你按下 submit 之后,可以看到你输入的名字被显示在一个新的页面中。再看一看浏览器的 URL 栏,它的内容应该是像这样的:

… /submitform.php3?first_name=Fred&last_name=Flintstone

因为我们用到的是表单 GET 方法,因此数据是通过 URL 来传送到 submitform.php3 的。显然, GET 方法是有局限性的,当要传递的内容很多时,就不能用 GET 了,只能用 POST 方法。但不管用什么方法,当数据传送完成后, PHP 自动的为每一个表单中的字段建立一个和他们的名字(表单的 name 属性)相同的变量。

PHP 变量都已用一个美元符号开头的,这样,在 submitform.php3 脚本处理的过程中,就会有 $first_name 和 $last_name 这两个变量了,变量的内容就是你输入的内容。

我们来检查一下你输入的名字是否真的被输入到数据库中了。启动 MySQL, 在 mysql> 提示符下输入:

mysql> select from tablename;

你应该可以得到一个表,内容就是你刚才输入的了:

| first_name | last_name |

| 柳 | 如风

1 rows in set (0.00 sec)

我们再来分析一下 submitform.php3 是如何工作的:

脚本的开始两行是:

mysql_connect (localhost, username, password);

mysql_select_db (dbname);

这两个函数调用用来打开 MySQL 数据库,具体的参数的含义刚才已经说过了。

下面的一行是执行一个 SQL 语句 :

mysql_query ("INSERT INTO tablename (first_name, last_name)

VALUES ('$first_name', '$last_name')

mysql_query 函数就是用来对选定的数据库执行一个 SQL 查询。你可以在 mysql_query 函数中执行任何的 SQL 语句。被执行的 SQL 语句必须作为一个字符串用双引号括起来,在其中的变量要用单引号括起来。

有一个要注意的事情: MySQL 的语句要用一个分号 (;) 结束,一行 PHP 代码同样也是这样,但是在 PHP 脚本中的 MySQL 语句是不能有分号的。也就是说,当你在 mysql> 的提示符下输入 MySQL 命令,你应该加上分号:

INSERT INTO tablename (first_name, last_name)

VALUES ('$first_name', '$last_name');

但是如果这个命令出现在 PHP 脚本中,就要去掉那个分号了。之所以这样做,是因为有的语句,如 SELECT 和 INSERT ,有没有分号都可以工作。但是还有一些语句,如 UPDATE ,加上分号就不行了。为了避免麻烦,记住这条规则就好了。

PHP 如何从 MySQL 中提取数据

请输入您的查询内容 :

姓:

名 :

同样,还要有一个 php 脚本来处理这个表单,我们再建立一个 searchform.php3 文件:

mysql_connect (localhost, username, password);

mysql_select_db (dbname);

if ($first_name == "")

{$first_name = '%';}

{$last_name = '%';}

$result = mysql_query ("SELECT FROM tablename

AND last_name LIKE '$last_name%'

if ($row = mysql_fetch_array($result)) {

do {

print $row["first_name"];

print $row["last_name"];

print ("");

} while($row = mysql_fetch_array($result));

} else {print " 对不起,再我们的数据库中,没有找到符合的纪录。 ";}

当你在表单中输入了要检索的内容,再按下 SUBMIT 按钮后,就会进入一个新的页面,其中列出了所有匹配的搜索结果。下面再来看看这段脚本到底是怎样完成搜索任务的。

前面的几条语句和上面讲到的一样,先是建立数据库连接,然后选定数据库和数据表,这些是每个数据库应用所必需的。然后有这样的几条语句:

if ($first_name == "")

{$first_name = '%';}

{$last_name = '%';}

这几行用来检查表单的各字段是否为空。要注意的是那两个等号,因为 PHP 的语法大多源于 C 语言,这儿等号的用法也同 C 一样:一个等号是赋值号,两个等号才代表逻辑等于。还应该注意的是:当 IF 后条件为真时,后面要执行的语句是放在“ { ”和“ } ”中的,并且其中的每一条语句后面都要加上分号表示语句结束。

百分号 % 是 SQL 语言的通配符,理解了之一点后,就该知道这两行的意思了:如果“ FIRST_NAME ”字段为空,那么将列出所有的 FIRST_NAME 。后面的两句也是同样的意思。

$result = mysql_query ("SELECT FROM tablename

AND last_name LIKE '$last_name%'"

这一行完成了搜索的大部分工作。当 mysql_query 函数完成一个查询后,它返回一个整数标志。

查询从所有的记录中选出那些 first_name 列和 $first_name 变量相同,并且 last_name 列和 $last_name 变量值也相同的记录,放到暂存的记录集中,并用返回的整数作为这个记录集的标志。

if ($row = mysql_fetch_array($result)) {

do {

print $row["first_name"];

print $row["last_name"];

print ("");

} while($row = mysql_fetch_array($result));

} else {print " 对不起,再我们的数据库中,没有找到符合的纪录。 ";}

这是的一步,就是显示部分了。 mysql_fetch_array 函数先提取出查询结果的行的内容,在用 PRINT 语句显示出来。这个函数的参数就是 mysql_query 函数返回的整数标志。而 mysql_fetch_array 执行成功后,记录集指针会自动下移,这样当再一次执行 mysql_fetch_array 时,得到的就是下一行纪录的内容了。

数组变量 $row 被 mysql_fetch_array 函数建立并用查询的结果字段来填充,数组的每一个分量对应于查询结果的每一个字段。

如果有符合的纪录被找到,变量 $row 不会空,这时就会执行花括号中的语句:

do {

print $row["first_name"];

print $row["last_name"];

print ("");

} while($row = mysql_fetch_array($result));

这是一个 do … while 循环。与 while 循环不同的是,它是先执行一遍循环循环体,然后在检查循环条件是否满足。由于已经知道在纪录集不为空的情况下,肯定至少要把循环体执行一遍,所以应该用到的是 do … while 而不是 while 循环了。在花括号中的就是要执行的循环体:

print $row["first_name"];

print $row["last_name"];

print ("");

然后就是检查 while 条件是否满足。 Mysql_fetch_array 函数再次被调用,来得到当前纪录的内容。这个过程一直循环,当没有下一条纪录存在时, mysql_fetch_array 返回 false ,循环结束,纪录集也就被完全的遍历了一次。

mysql_fetch_array($result) 返回的数组,不仅可以用字段名来调用,也可以像一般的数组那样,用下标来引用数组的各个分量。这样,上面的代码还可以写成这样:

print $row[0];

print ("");

我们还可以用 echo 函数来把这四条语句写的紧凑一些:

echo $row[0], " ", $row[1], "";

当没有任何匹配的纪录被找到时,在 $row 中就不会有任何内容,这时就会调用 if 语句的 else 子句了:

else {print " 对不起,再我们的数据库中,没有找到符合的纪录。 ";}