Yii查询生成器(Query Builder)用法实例教程

本文为yii官网英文文档的翻译版本,主要介绍了Yii查询生成器(Query Builder)的用法。分享给大家供大家参考之用。具体如下:

首先,Yii的查询生成器提供了用面向对象的方式写SQL语句。它允许开发人员使用类的方法和属性来指定一个SQL语句的各个部分。然后,组装成一个有效的SQL语句,可以通过调用DAO数据访问对象的描述方法为进一步执行。以下显示了一个典型的使用查询生成器建立一个select语句:

db->createCommand() ->select('id,username,profile') ->from('tbl_user u') ->join('tbl_profile p','u.id=p.user_id') ->where('id=:id',array(':id'=>$id)) ->queryRow();

当你在应用程序中需要组装SQL语句的程序,或基于一些条件逻辑时,最好使用查询生成器。使用查询生成器的好处主要包括:

①.它可以建立复杂的SQL语句编程。

②.它会自引用表名和列名防止SQL保留字和特殊字符的冲突。

③.它还可以引用参数值和使用参数绑定,这有助于减少SQL注入攻击的风险。

④.它提供了一定程度的数据库抽象,简化了迁移到不同的数据库平台的成本。

它不强制使用查询生成器。事实上,如果你的查询是简单的,它是更容易和更快的直接写SQL语句。

注:查询生成器不能用于修改现有的查询指定为SQL语句。例如,下面的代码将不能工作:

db->createCommand('SELECT * FROM tbl_user'); // the following line will NOT append WHERE clause to the above SQL $command->where('id=:id',array(':id'=>$id));

1. 制备查询生成器(Preparing Query Builder)

Yii的查询生成器是从 CDbCommand 提供主要数据库查询类,描述数据访问对象。

开始使用查询生成器,我们创造了 CDbCommand 的一个新实例,

db->createCommand();

我们使用 Yii::app()->db 来获得数据库连接,然后调用 CDbConnection::createCommand() 创建所需的命令实例。

请注意,将整个SQL语句放入 createcommand() ,叫做数据访问对象,我们需呀把设置它为空。这是因为我们将在下面的解释中使用查询生成器添加SQL语句的各个部分的方法。

2. 建立数据检索查询(Building Data Retrieval Queries)

数据检索查询是指选择SQL语句。查询生成器提供了一套方法来建立一个SELECT语句的各个部分。因为所有这些方法返回 CDbCommand 的实例,我们可以使用方法链调用他们,如图所示,在本节开头的例子。

select(): 指定查询的选择部分 specifies the SELECT part of the query selectDistinct(): 指定查询不重复的选择部分 specifies the SELECT part of the query and turns on the DISTINCT flag from(): 指定查询的FROM specifies the FROM part of the query where(): 指定查询的WHERE specifies the WHERE part of the query andWhere(): 用and的方式添加到WHERE的条件中 appends condition to the WHERE part of the query with AND operator orWhere(): 用or的方式添加到WHERE的条件中 appends condition to the WHERE part of the query with OR operator join(): 添加一个内部联接的查询片段 appends an inner join query fragment leftJoin(): 追加一个左外连接查询片段 appends a left outer join query fragment rightJoin(): 追加一个右外部联接查询片段 appends a right outer join query fragment crossJoin(): 追加一个交叉连接查询片段 appends a cross join query fragment naturalJoin(): 追加一个自然连接查询片段 appends a natural join query fragment group(): 指定查询的GROUP BY specifies the GROUP BY part of the query having(): 指定查询的HAVING specifies the HAVING part of the query order(): 指定查询的ORDER BY specifies the ORDER BY part of the query limit(): 指定查询的LIMIT specifies the LIMIT part of the query offset(): 指定查询的OFFSET specifies the OFFSET part of the query union(): 添加查询的UNION appends a UNION query fragment

在下面,我们将解释如何使用这些查询生成器方法。为简单起见,我们假设底层数据库是MySQL。注意:如果你使用的是其他数据库,表/列/值引用的例子可能是不同的。

select()

该select()方法指定一个查询的选择部分。$columns参数指定要选择的列,它可以是一个字符串,用逗号分隔列,或者一个数组的列名称。列的名称可以包含表的前缀和 / 或列别名。该方法将自动引用列名,除非一列包含一些括号(这意味着这个列是一个DB的表达式)。

下面是一些例子:

selectDistinct()

selectdistinct()方法类似于select(),除了它打开了 DISTINCT 的标志。例如,selectdistinct('id,用户名”)会产生以下SQL:

from()

from()方法指定来了一个查询的FROM部分。 $tables 参数指定表的选择。这可以是一个字符串,用逗号分隔的表的名称,或表名数组。表的名称可以包含架构前缀(例如公共。tbl_user)和/或表的别名(e.g.tbl_user U)。该方法将自动引用表的名称,除非它包含一些括号(即表是一个给定的子查询或DB的表达式)。

下面是一些例子:

where()

where()方法指定查询的WHERE。$conditions 参数指定查询条件的同时,$params 指定参数绑定到整个查询。$conditions参数可以是一个字符串(例如id = 1)或一个数组中的格式:

array(operator,operand1,operand2,...) operator 可以是以下的任何一个:

①.and: operands 应该使用 and 连接在一起。例如, array('and','id=1','id=2') 将产生 id=1 AND id=2 。如果一个操作数是一个数组,它将使用这里描述的相同规则转换成一个字符串。例如,array('and','type=1',array('or','id=2')) 将生成 type=1 AND (id=1 OR id=2)。

②.or: 类似 and 操作,除了operands 是使用 OR 连接的。

③.in: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('in','id',array(1,2,3)) 将生成 id IN (1,3)。

④.not in: 类似 in 操作,除了用 NOT IN 代替 IN 去生成SQL。

⑤.like: operand 1 应是一个列或 DB 表达式,而 operand 2 是代表值的范围的数组,列或 DB 表达式应在这个数组的范围内。例如,array('like','name','%tester%') 会生成 name LIKE '%tester%'。当规定值的范围为一个数组时,多个 LIKE 生成SQL时会用 AND 连接。例如,array('like',array('%test%','%sample%')) 会生成 name LIKE '%test%' AND name LIKE '%sample%'。

⑥.not like: 类似 like 的操作,除了用 NOT LIKE 代替 LIKE 去生成SQL。

⑦.or like: 类似 like 的操作,除了多个 like 生成 SQL 时用OR连接。

⑧.or not like: 类似 not like 的操作,除了多个 like 生成 SQL 时用OR连接。

下面是一些例子,使用的地方:

1,':id2'=>2)) // WHERE id=1 OR id=2 where(array('or','id=2')) // WHERE id=1 AND (type=2 OR type=3) where(array('and','type=2','type=3'))) // WHERE `id` IN (1,2) where(array('in',2)) // WHERE `id` NOT IN (1,2) where(array('not in',2))) // WHERE `name` LIKE '%Qiang%' where(array('like','%Qiang%')) // WHERE `name` LIKE '%Qiang' AND `name` LIKE '%Xue' where(array('like',array('%Qiang','%Xue'))) // WHERE `name` LIKE '%Qiang' OR `name` LIKE '%Xue' where(array('or like','%Xue'))) // WHERE `name` NOT LIKE '%Qiang%' where(array('not like','%Qiang%')) // WHERE `name` NOT LIKE '%Qiang%' OR `name` NOT LIKE '%Xue%' where(array('or not like',array('%Qiang%','%Xue%')))

请注意,当操作者含有like时,我们必须明确指定的通配符(如%和_)的模式。如果参数是从用户的输入,我们也应该使用下面的代码转义特殊字符,以防止他们被当作通配符:

'\%','_'=>'\_')); $command->where(array('like','title','%'.$keyword.'%'));

andWhere()

用and 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

orWhere()

用 or 的方式添加到WHERE的条件中。此方法的行为几乎是 where() 相同,除了它只是添加条件不能取代它。在 where() 文档中有该方法参数的详细信息。

order()

order() 方法指定查询的ORDER BY部分。$columns 参数指定列进行排序,这可以是一个包含用逗号分隔列和order的方向(ASC 或 DESC)的字符串,或者一个列和order的方向的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即给出一个 DB 表达式)。

下面是一些例子:

limit() and offset()

limit()和offset()方法指定查询的 LIMIT 和 OFFSET 部分。请注意,某些DBMS不支持 LIMIT 和 OFFSET 语法。在这种情况下,查询生成器将改写整个SQL语句来模拟 LIMIT 和 OFFSET 的功能。

下面是一些例子:

join() and its variants

join()方法及其变种指定如何与其他表连接,使用内部联接,左外连接,右外部联接,交叉连接,或自然连接。 $table 参数指定要加入哪个表。表名可以包含数据库的前缀和 / 或别名。该方法将引用表名,除非它包含一个插入语,即一个DB表达式或子查询。 $conditions 参数指定连接条件。它的语法与where() 相同。$params 参数指定绑定到整个查询的参数。

值得注意的是,它不像其他的查询生成器方法,每次调用一个join方法都会追加到SQL中。

下面是一些例子:

1))

group()

group() 方法指定查询的GROUP BY。 $columns 参数指定列进行分组,它可以是一个用逗号分隔的列的字符串,或者一个列的数组。列名称可以包含表前缀。该方法将自动引用列名,除非一列包含一些括号(即是一个 DB 表达式)。

下面是一些例子:

having()

having() 方法指定查询的 HAVING。它的使用方式与 where() 相同。

下面是一些例子:

union()

union() 方法指定查询 UNION。它使用UNION操作附加到现有的SQL上。调用union()多次将现有的SQL附加多个表。

下面是一些例子:

执行查询(Executing Queries)

调用上面查询生成器的方法来建立一个查询后,我们可以调用DAO方法数据访问对象执行查询。例如,我们可以调用 CDbCommand::queryRow() 获得连续的结果,或者使用 CDbCommand::queryAll() 立刻得到所有行。

例子:

db->createCommand() ->select('*') ->from('tbl_user') ->queryAll();

检索表(Retrieving SQLs)

除了执行查询生成器的查询,我们也可以获取相应的SQL语句。这可以通过调用 CDbCommand::getText() 获得。

db->createCommand() ->select('*') ->from('tbl_user') ->text;

如果有任何参数必须绑定到查询的,他们可以通过 CDbCommand::params 的属性绑定。

建立查询的替代语法(Alternative Syntax for Building Queries)

有时,使用方法链来建立一个查询可能不是最佳的选择。Yii的查询生成器允许使用对简单象属性赋值的方式去建立查询。特别是,每个查询生成器的方法都有一个具有相同名称的属性。给属性赋值相当于调用相应的方法。例如,下面两个语句是等价的,假设$command 代表 CDbCommand 对象:

select(array('id','username')); $command->select = array('id','username');

此外, CDbConnection::createCommand() 方法可以把一个数组作为参数。数组中的键值对将被用来初始化创建的 CDbCommand 实例的属性。这意味着,我们可以使用下面的代码来建立一个查询:

db->createCommand(array( 'select' => array('id','username'),'from' => 'tbl_user','where' => 'id=:id','params' => array(':id'=>1),))->queryRow();

建立多个查询(Building Multiple Queries)

一个 CDbCommand 实例可以重复使用多次建立几个查询。建立一个新的查询之前,需要调用 CDbCommand::reset() 方法以清理前面的查询。例子:

db->createCommand(); $users = $command->select('*')->from('tbl_users')->queryAll(); $command->reset(); // clean up the previous query $posts = $command->select('*')->from('tbl_posts')->queryAll();

3. 建立数据操作查询(Building Data Manipulation Queries)

数据操作查询是指SQL语句插入,更新和删除数据库表中的数据。对应于这些查询,查询生成器分别提供了插入,更新和删除的方法。不同于上面介绍 SELECT 的查询方法,这些数据操作查询方法将建立一个完整的SQL语句,并立即执行。

insert(): 将行插入到表 update(): 更新表中的数据 delete(): 从表中删除数据 下面描述了这些数据操作查询方法。

insert()

insert()方法的建立和执行一条 INSERT SQL 语句。 $table 参数指定要插入的表,而键值对数组 $columns 指定要插入的列的值。该方法将转义表名,并且将与绑定参数结合使用。

下面是一个例子:

insert('tbl_user',array( 'name'=>'Tester','email'=>'tester@example.com',));

update()

update()方法的建立和执行一个SQL更新语句。 $table 参数指定要更新的表; $columns 是键值对的数组,用于指定要更新的列值的;$conditions 和 $params 像where()一样,指定 UPDATE 语句中的 WHERE 子句。该方法将转义表名,并且将与要更新的值的参数结合使用。

下面是一个例子:

update('tbl_user',),'id=:id',array(':id'=>1));

delete()

delete()方法的建立和执行一个SQL删除语句。 $table 参数指定要删除数据的表;$conditions 和$params像where()一样,指定 DELETE 语句中的 WHERE 子句。该方法将正确转义表名。

下面是一个例子:

delete('tbl_user',array(':id'=>1));

4. 建立架构操作查询(Building Schema Manipulation Queries)

除了正常的数据检索和操作查询,查询生成器提供了一套用于可以操纵数据库的构建和执行SQL查询的方法。它支持以下操作:

createTable(): 创建一个表 renameTable(): 重命名表 dropTable(): 删除一个表 truncateTable(): 截断一个表,即删除表中的所有数据但不删除表本身 addColumn(): 给表添加列 renameColumn(): 重命名表中的列 alterColumn(): 改变一个表的列 addForeignKey(): 添加一个外键(自1.1.6可用) dropForeignKey(): 删除一个外键(自1.1.6可用) dropColumn(): 删除一个表的列 createIndex(): 创建一个索引 dropIndex(): 删除一个索引

Info: 虽然在不同的数据库管理系统中SQL语句操作数据库的模式有很大的不同,但查询生成器试图提供一个统一的接口,用于构建这些查询。这简化了数据库迁移从一个数据库管理系统到另一个任务。

抽象数据类型 Abstract Data Types

查询生成器中引入了一组可以在定义表的列中使用抽象数据类型。与物理数据类型不同,物理数据类型有具体独特的DBMS而且在不同的DBMS中有很大的不同,抽象数据类型都是独立的DBMS。当抽象数据类型在定义表的列中使用时,查询生成器将其转换成相应的物理数据类型。

下面的抽象数据类型由查询生成器的支持。

pk: 一个通用的主键类型,将被转换成 int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY for MySQL; string: 字符串类型,将被转换成 varchar(255) for MySQL; text: 文本型(长字符串),将被转换成 text for MySQL; integer: 整数类型,将被转换成 int(11) for MySQL; float: 浮点数类型,将被转换成 float for MySQL; decimal: 十进制数类型,将被转换成 decimal for MySQL; datetime: datetime类型,将被转换成 datetime for MySQL; timestamp: 时间戳类型,将被转换成 timestamp for MySQL; time: 时间类型,将被转换成 time for MySQL; date: 日期类型,将被转换成 date for MySQL; binary: 二进制数据类型,将被转换成 blob for MySQL; boolean: 布尔类型,将被转换成 tinyint(1) for MySQL; money: 金钱/货币型,将被转换成 decimal(19,4) for MySQL. 自1.1.8版本开始此类型可以使用。

createTable()

createTable() 方法构建和执行一条创建表的SQL语句。$table 参数指定要创建的表的名称。 $columns 参数指定在新表中的列。他们必须被指定为名称类型的键值对(e.g. 'username'=>'string')。 $options 参数指定应附加到生成的SQL上的任何额外的SQL片段。查询生成器将正确的引用的表名以及列名。

当指定一个列的定义时,可以使用如上所述的抽象数据类型。查询生成器会根据当前使用的数据库管理系统的抽象数据类型转换成相应的物理数据类型。例如,string 类型将被转换为MySQL的 varchar(255)。

一个列定义还可以包含非抽象数据类型或规格。他们将没有任何改变的被放置在生成的SQL中。例如,point 不是一个抽象数据类型,如果用在列定义,它会出现在生成的SQL中,而且 string NOT NULL将被转换varchar(255) NOT NULL(即只有抽象类型的字符串转换)。

下面是一个例子,显示了如何创建一个表:

'pk','username' => 'string NOT NULL','location' => 'point','ENGINE=InnoDB')

renameTable()

renameTable() 方法创建和执行一条重命名表名的SQL语句。 $table 参数指定要重命名的表的名称。 $newName 参数指定表的新名称。查询生成器将正确引用的表名。

下面是一个示例,演示了如何重命名表:

dropTable()

dropTable() 方法创建和执行一条删除表的SQL语句。在$table 参数指定要删除的表的名称。查询生成器会正确地引用的表名。

下面是一个示例展示如何删除一个表:

truncateTable()

truncateTable() 方法建立和执行一条清空表数据的SQL语句。 $table 参数指定清空的表名。查询生成器会正确地引用的表名。

下面是一个示例显示如何清空表:

addColumn()

addColumn() 方法创建并执行一条添加一个表的新列的SQL语句。 $table 参数指定新列将被添加到的表的名称。 $column 参数指定新列的名称。 $type 指定新列的定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。

下面是一个示例,演示如何添加一个表的列:

dropColumn()

dropColumn() 方法创建和执行一条删除表列的SQL语句。 $table 参数指定要被删除的列所属的表名。 $column 参数指定要被删除的列名。查询生成器将正确地引用的表名以及列名。

下面是一个示例展示如何删除一个表列:

renameColumn()

renameColumn() 方法创建和执行一条重命名列的SQL语句。 $table 参数指定要重命名的列所属的表的名称。 $name 参数指定的旧列名。 $newName 指定新的列名。查询生成器将正确地引用的表名以及列名。

下面是一个示例,展示了如何重命名表列:

alterColumn()

alterColumn() 方法创建和执行一条修改表列的SQL语句。 $table 参数指定要被改变的列所属的表的名称。 $column 参数指定被改变的列的名称。$type 指定列的新定义。列定义中可以包含抽象数据类型,如 "createTable"小节中的描述。查询生成器将正确的引用的表名以及列名。

下面是一个示例,展示了如何更改一个表列:

addForeignKey()

addForeignKey() 方法创建和执行一条添加一个外键约束SQL语句。 $name 参数指定外键的名称。 $table 和 $columns 参数指定外键的表名和列名。如果有多个列,他们应该用逗号字符分隔。 $refTable 和 $refColumns 参数指定表名和列名的外键引用。 $delete 和 $update 参数指定 SQL语句中的 ON DELETE 和ON UPDATE选项。大多数的DBMS都支持这些选项:RESTRICT,CASCADE,NO ACTION,SET DEFAULT,SET NULL. 。查询生成器会正确地引用表名,索引名和列名。

下面是一个示例,演示如何添加一个外键约束:

dropForeignKey()

dropForeignKey() 方法创建和执行一条删除一个外键约束的SQL语句。 $name 参数指定的要删除的外键约束的名称。 $table 参数指定外键所属的表的名称。查询生成器将正确地引用的表名以及约束名称。

下面是一个示例,显示了如何删除外键约束:

createIndex()

createIndex() 方法构建和执行一条创建索引的SQL语句。 $name 参数指定要创建的索引的名称。$table 参数指定索引所属的表的名称。$column 参数指定要索引的列的名称。 $unique 参数指定是否创建一个唯一索引。如果索引由多个列,则必须用逗号将它们隔开。查询生成器会正确地引用表名,索引名和列名。

下面是一个示例,显示了如何创建索引:

dropIndex()

dropIndex() 方法创建和执行一条删除索引的SQL语句。 $name 参数指定要删除的索引的名称。$table 参数指定索引所属的表的名称。查询生成器将正确地引用的表名以及索引名称。

下面是一个示例,显示了如何删除索引:

希望本文所述对大家yii学习有所帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读8.4k次,点赞8次,收藏7次。SourceCodester Online Tours & Travels Management System pay.php sql injectionLine 16 of pay.php invokes a SQL query built using unvalidated input. This call could allow an attacker to modify the statement’s meaning or to execute arbitrary SQL commands.SQL
文章浏览阅读3.4k次,点赞46次,收藏51次。本文为大家介绍在windwos系统搭建typecho博客+cpolar内网穿透工具将博客发布到公共网络环境,实现远程也可以访问和操作。_windows搭建typecho
文章浏览阅读1.1k次。- php是最优秀, 最原生的模板语言, 替代语法,让php更加的优雅的与html生活在一起 -->请放心, 最终生成的,或者说用户最终看到的,仍然是一个html文档, php代码中的内容不会被泄漏的。-- 将php与html代码混编的时候,大括号很容易造成配对错误,最好杜绝它 -->php标签内部代码由php.exe解释, php标签之外的代码原样输出,仍由web服务器解析。-- 所以php的流程控制语句, 都提供了替代语法,用冒号代替大括号 -->php echo '百变鹏仔'?_利用php将静态页面修改为动态页面
文章浏览阅读1.1k次,点赞18次,收藏15次。整理K8s网络相关笔记博文内容涉及 Linux network namespace 认知以及彼此通信Demo,实际中的应用理解不足小伙伴帮忙指正不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树。_linux network namespace 多端通信 模式认知
文章浏览阅读1.2k次,点赞22次,收藏19次。此网络模型提供了一个逻辑二层(L2)网络,该网络封装在跨 Kubernetes 集群节点的现有三层(L3)网络拓扑上。使用此模型,可以为容器提供一个隔离的 L2 网络,而无需分发路由。封装网络带来了少量的处理开销以及由于覆盖封装生成 IP header 造成的 IP 包大小增加。封装信息由 Kubernetes worker 之间的 UDP 端口分发,交换如何访问 MAC 地址的网络控制平面信息。此类网络模型中常用的封装是 VXLAN、Internet 协议安全性 (IPSec) 和 IP-in-IP。_k8s网络组件对比
文章浏览阅读1.1k次,点赞14次,收藏19次。当我们谈论网络安全时,我们正在讨论的是保护我们的在线空间,这是我们所有人的共享责任。网络安全涉及保护我们的信息,防止被未经授权的人访问、披露、破坏或修改。
文章浏览阅读1.3w次,点赞3次,收藏7次。尽管您可以通过 ping 命令解析出网站的 IP 地址,但是可能在浏览器中访问时仍然遇到问题,这可能是因为浏览器使用的 DNS 解析结果不同于 ping 命令使用的解析结果。可能是因为您的网络或设备上设置了防火墙,阻止了对特定网站的访问。有些国家或组织可能会对特定的域名进行屏蔽,从而阻止访问相关网站。如果您的网络使用代理服务器进行访问控制,可能会由于代理服务器的配置问题导致无法访问某些网站。即使您的网络和设备一切正常,目标网站本身可能也存在问题,例如服务器故障、维护或过载,导致无法访问。_能ping通打不开网页
文章浏览阅读839次,点赞22次,收藏19次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读2.1k次,点赞31次,收藏22次。基于微信小程序奶茶点餐外卖系统设计与实现(PHP后台+Mysql)可行性分析毕设源代码毕业设计,数据安全和系统稳定性以及团队能力和资源配备方面都具备较好的条件。因此,该项目的可行性较高。:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;微信小程序作为一种快捷、方便的移动应用形式,成为很多用户点餐外卖的首选。项目的界面和功能都可以定制,包安装运行!项目配有对应开发文档、开题报告、任务书、PPT、论文模版等。
文章浏览阅读1.8k次,点赞52次,收藏38次。本文主要通过对系统的前台系统和后台管理系统进行了功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。Lucky+Baby母婴用品网站使用 Dreamweaver、HBuilder代码编辑器、Apache服务器等开发工具,完成了系统的主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、商品搜索功能、生成订单和查看我的订单功能、在线付款功能功能的实现过程。
文章浏览阅读1.5k次,点赞45次,收藏40次。本设计主要实现集人性化、高效率、便捷等优点于一身的人事信息管理系统,完成首页、系统用户、通知公告、部门信息、员工薪资、考勤签到、员工请假、招聘信息、应聘信息等功能模块。
文章浏览阅读1k次。该错误通常出现在数据库读取结果集数据时,比如当我们写好SQL语句从数据库读取数据时,本身应该返回结果集,再给结果集中读取数据。解决思路:这种错误一般是因为echo后面输出了一个数组导致的,或者是数组作为字符串进行拼接运算时导致的。该错误直译为:警告:mysqli_fetch_assoc函数期望参数1是mysqli的结果集,但是给了一个布尔值。这种错误是PHP解析器在解析时遇到了语法错误,直译为:解析错误:语法错误,意料之外的...该错误直译为:提示:未定义的索引:username。_array to string conversion in
文章浏览阅读2.7w次。解决http请求报错context deadline exceeded (Client.Timeout exceeded while awaiting headers)_context deadline exceeded (client.timeout exceeded while awaiting headers)
文章浏览阅读1.3k次,点赞26次,收藏24次。复杂网络是一种由大量相互连接的元素(节点或顶点)组成的网络结构,这些连接通常是非常复杂和动态的。这些网络可以在各种领域中发现,包括社交网络、生物学系统、信息技术和交通系统等。_代理建模
文章浏览阅读2.6k次,点赞76次,收藏71次。epoll详解,事件模型,ET/LT模式,并通过三个示例进行代码实现。
文章浏览阅读3.3k次。罗拉ROLA-IP是一家来自纽约的代理IP提供商,由李嘉诚先生投资建设,韩国人工智能、自动驾驶、虚拟现实方面的领军企业World IT Show投资入股,由美国纽约大学IT管理教授团队研究开发,进入中国市场6年多,全世界设有多个分子公司。接下来,我们要检查代理和防火墙的设置,因为在绝大多数情况下,它们是导致这个错误的原因,尤其是当用户使用免费代理时。对网站的访问受阻实际上是一个非常常见的错误,它既可能是由于物理原因(硬件问题)造成的,也可能是由于软件错误引起的。检查代理设置,并确保其正确配置。_无法访问此网站,检查代理服务器和防火墙
文章浏览阅读1.1k次,点赞14次,收藏20次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。_php洗车服务预约管理系统php源码
文章浏览阅读1.1k次。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。
文章浏览阅读936次,点赞22次,收藏17次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。
文章浏览阅读822次,点赞15次,收藏14次。在整个设计过程中,要确定可能的具体解决方案,以实现每一个小的最终目标,对于每一个小目标,我们首先必须了解一些相关的需求分析信息。除了以上作品下面是2023-2024年最新100套计算机专业原创的毕业设计源码+数据库,是近期作品,如果你的题目刚好在下面可以文末领取java源码参考。springboot基于springboot的在线考试系统。springboot基于springboot的商城购物系统。springboot基于微信小程序的智慧校园设计与实现。springboot基于用户的协同过滤算法的话题推荐。