澳门新葡萄京娱乐场再讲php中require(),include(),require_once()和include_once()他们的区别

例子:

环境

引用文件的方法有两种:require 及 include。两种方式提供不同的使用弹性。

1、这个是 conn.php的内容:

开发包:appserv-win32-2.5.10

require 的使用方法如
require(“MyRequireFile.php”);
。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入
require 所指定引入的文件,使它变成 PHP
程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

?php$conn=mysql_connect(”localhost”,””,””);mysql_select_db(”php”);?

服务器:Apache2.2

include 使用方法如 include(“MyIncludeFile.php”);
。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include
的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

2、如果这样调用:

数据库:phpMyAdmin

_once 后缀表示已加载的不加载

functionfun($a){include(conn.php);…….//数据库处理语句}…..fun(aaa);//第一次调用…..fun(bbb);//第二次调用

语言:php5,java

1.报错

在第二次调用的时候会出错,但是把 include 换成 require 就不会出问题。

平台:windows 10

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码
require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码

因为 require 文件只在读到该页面的时候调用一次,而 include 在每次调用含有
fun 的地方都调用,所以就出现了数据库连接还没关闭就再次连接的错误。

java驱动:mysql-connector-java-5.1.37

注:在 PHP 4.3.5
之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。

因此在循环中只要调用一次的用 require ,其他地方这两个都可以用。

需求

2.条件引用

编写一个PHP脚本语言,连接到phpMyAdmin数据库的test库

include()与require()的功能相同,用法上却有一些不同,include()是有条件包含函数,而require()则是无条件包含函数,
例如下面例子,如果变量$somg为真,则将包含文件somefile.php:

编写一个java web服务端,连接到phpMyAdmin数据库的test库

 

代码

 代码如下

php连接方式

if($some){ include ‘somefile.php’; }

mysql.php

但无论$some取何值,下面的代码将把文件somefile.php包含进文件里:

test.php测试

 代码如下

 运行截图 :

if($something){   require ‘somefile.php’; }

澳门新葡萄京娱乐场 1澳门新葡萄京娱乐场 2

下面的例子充分说明了这两个函数之间的不同

java 连接方式

 代码如下

1.新建一个java project为mysqlTest

$i = 1;
while ($i < 3) {   require “somefile.$i.php”;   $i++; }

2.加载JDBC驱动,mysql-connector-java-5.1.37

可以从以上这段代码中看出,每一次循环的时候,程序都将把同一个文件包含进去,很显然这不我们想要的,可以看出这段代码希望在每次循环时,
将不同的文件包含进来,如果要完成这个功能,只能使用函数include()

澳门新葡萄京娱乐场 3

 代码如下

MySQLConnection.java

$i = 1;
while ($i < 3) {  
include “somefile.$i.php”;   $i++;
}

package com.mysqltest;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
/*
 * **Mysql连接**
 * 
 * 参数:
 * conn 连接
 * url mysql数据库连接地址
 * user 数据库登陆账号
 * password 数据库登陆密码
 * 方法:
 * conn 获取连接
 */
public class MySQLConnection {
  public static Connection conn = null;
  public static String driver = "com.mysql.jdbc.Driver";
  public static String url = "jdbc:mysql://127.0.0.1:3306/post";
  public static String user = "root";
  public static String password = "123";
  /*
   * 创建Mysql数据连接 第一步:加载驱动 Class.forName(Driver) 第二步:创建连接
   * DriverManager.getConnection(url, user, password);
   */
  public Connection conn() {
    try {
      Class.forName(driver);
    } catch (ClassNotFoundException e) {
      System.out.println("驱动加载错误");
      e.printStackTrace();
    }
    try {
      conn = DriverManager.getConnection(url, user, password);
    } catch (SQLException e) {
      System.out.println("数据库链接错误");
      e.printStackTrace();
    }
    return conn;
  }
}

3.require用相对路径的时候

Work.java

当A引用B,而B又引用了其他文件C时,C的路径如果是相对路径,则是相对于A的路径,而不是相对于B的’

package com.mysqltest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
 * mysql增删改查
 */
public class Work {
  /*
   * insert 增加
   */
  public static int insert() {
    MySQLConnection connection = new MySQLConnection();
    Connection conns; // 获取连接
    PreparedStatement pst; // 执行Sql语句
    int i = 0;
    String sql = "insert into user (username,password) values(?,?)";
    try {
      conns = connection.conn();
      pst = conns.prepareStatement(sql);
      pst.setString(1, "lizi");
      pst.setString(2, "123");
      i = pst.executeUpdate();
      pst.close();
      conns.close();
    } catch (SQLException e) {
      System.out.println("数据写入失败");
      e.printStackTrace();
    }
    return i;
  }
  /*
   * select 写入
   */
  public static void select() {
    MySQLConnection connection = new MySQLConnection();
    Connection conns; // 获取连接
    PreparedStatement pst; // 执行Sql语句(Statement)
    ResultSet rs; // 获取返回结果
    String sql = "select * from user";
    try {
      conns = connection.conn();
      pst = conns.prepareStatement(sql);
      rs = pst.executeQuery(sql);// 执行sql语句
      System.out.println("---------------------------------------");
      System.out.println("名字    |    密码");
      while (rs.next()) {
        System.out.println(rs.getString("username") + "    |    " + rs.getString("password"));
      }
      System.out.println("---------------------------------------");
      conns.close();
      pst.close();
      rs.close();
    } catch (SQLException e) {
      System.out.println("数据查询失败");
      e.printStackTrace();
    }
  }
  /*
   * update 修改
   */
  public static int update() {
    MySQLConnection connection = new MySQLConnection();
    Connection conns; // 获取连接
    PreparedStatement pst; // 执行Sql语句(Statement)
    int i = 0;
    String sql = "update user set password = ? where username = ?";
    try {
      conns = connection.conn();
      pst = conns.prepareStatement(sql);
      pst.setString(1, "123");
      pst.setString(2, "lizi");
      i = pst.executeUpdate();
      pst.close();
      conns.close();
    } catch (SQLException e) {
      System.out.println("数据修改失败");
      e.printStackTrace();
    }
    return i;
  }
  /*
   * delete 删除
   */
  public static int delete() {
    MySQLConnection connection = new MySQLConnection();
    Connection conns; // 获取连接
    PreparedStatement pst; // 执行Sql语句(Statement)
    int i = 0;
    String sql = "delete from user where username = ?";
    try {
      conns = connection.conn();
      pst = conns.prepareStatement(sql);
      pst.setString(1, "lizi");
      i = pst.executeUpdate();
      pst.close();
      conns.close();
    } catch (SQLException e) {
      System.out.println("数据删除失败");
      e.printStackTrace();
    }
    return i;
  }
  /*
   * test
   */
  public static void main(String[] args) {
    // System.out.println(insert());
     select();
    // System.out.println(update());
    // System.out.println(delete());
  }
}

4.require_once() 语句在脚本执行期间包括并运行指定文件。此行为和
require()
语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。

 test截图

include_once() 语句在脚本执行期间包括并运行指定文件。此行为和 include()
语句类似,唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。如同此语句名字暗示的那样,只会包括一次。

澳门新葡萄京娱乐场 4

5..文件引用方式

ps:php操作MySQL数据库中语句

include有返回值,而require没有

我们常常用conn.php文件来建立与数据库的链接,然后在所需的文件中利用include
进行调用。这样有效防止对数据库属性的改动
而引起其他有关文件对数据调用的错误。

 代码如下

  现在来看一个conn.php文件,代码如下:

$login = include(’test.php’);
if(!empty($login))
{   echo “文件包含成功”;
 }
else
{   echo “文件包含失败”;
 }

如,$link = mysql_connect("localhost", "root", "") or die("不能连接到数据库服务器!可能是数据库服务器没有启动,或者用户名密码有误!".mysql_error());


.使用mysql_select_db()函数选择数据库文件:mysql_query("use 数据库名",$link);


如,$db_selected=mysql_query("use example",$link);


.使用mysql_query()函数执行SQL语句:mysql_query(string query(SQL语句),$link);


如:


添加会员:$result=mysql_query("insert into tb_member values('a','')",$link);


修改会员:$result=mysql_query("update tb_member setuser='b',pwd=''where user='a'",$link);


删除会员:$result=mysql_query("delecte from tb_member where user='b'",$link);


查询会员:$sql=mysql_query("select * from tb_book");


模糊查询:$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'");


//通用符%表示零个或任意多个字符。


显示表结构:$result=mysql_query("DESC tb_member");


.使用mysql_fetch_array()函数从数组结果集中获得信息:


语法结构:array mysql_fetch_array(resource result[,int result_type])


参数result资源类型的参数,整形型参数,要传入的是由mysql_fetch_array()函数返回的数据指针;


参数result_type:可选项,php操作MySQL数据库语句基础整数型参数,要传入的是MYSQL_ASSOC(关联索引)、MYSQL_NUM(数字索引) MYSQL_BOTH(包括前两者,默认值)


如:


<>$sql=mysql_query("select * from tb_book");
$info=mysql_fetch_object($sql);
<>$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'");
$info=mysql_fetch_object($sql);

include()执行时需要引用的文件每次都要进行读取和评估,
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)
可以看出若有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高,
若每次执行代码时相读取不同的文件或者有通过一组文件叠代的循环,就使用include(),
可以给想要包括的文件名设置变量,当参数为 include()时使用这个变量

.使用mysql_fetch_object()函数从结果集中获取一行作为对象:

 代码如下

语法结构:object mysql_fetch_object(resource result);

<?
conn.php
$dbh=mysql_connect(‘localhost’,’root’,’123456′);
mysql_select_db(‘DB’,’$dbh’);
?>
在实际应用中,我们调用文件如:
require(“conn.php”)或者include(“conn.php”);
但是如果这样:
filename.php
require(“conn.php”);
function myfun($par1,$par2)
{包含对数据库处理的语句}
…..
myfun($par1,$par2);
…..
myfun($p1,$p2);
?>

如:

 

<>$sql=mysql_query("select * from tb_book");
$info=mysql_fetch_object($sql);
<>$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'");
$info=mysql_fetch_object($sql);

总结

mysql_fetch_object()函数与mysql_fetch_array()函数类似,只有一点区别,即返回一个对象而不是数组,该函数只能通过字段名来访问数组。访问结果集中行的元素的语法结构:$row->col_name(列名)

incluce在用到时加载
require在一开始就加载
_once后缀表示已加载的不加载
php系统在加载php程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行
include的文件中出错了,主程序继续往下执行
require的文件出错了,主程序也停了
所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require
以下文档也适用于
require()。这两种结构除了在如何处理失败之外完全一样。include()
产生一个警告而 require()
则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用
require()。include()
就不是这样,脚本会继续运行。同时也要确认设置了合适的 include_path。
require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。require()函数更多地用在静态元素中,而include()更多地用于动态元素中。与include_once()类似的是,require_once()将首先检查是否已经插入给定的代码,如果代码已经存在,就不再插入了。

.使用mysql_fetch_row()函数逐行获得结果集中的每条记录:

语法结构:array mysql_fetch_row(resource result)

如:

<>$sql=mysql_query("select * from tb_book");
$row=mysql_fetch_row($sql);
<>$sql=mysql_query("select * from tb_book where bookname like '%".trim($txt_book)."%'");
$row=mysql_fetch_row($sql);

.使用mysql_num_rows()函数获取结果集中地记录数:

语法结构:int mysql_num_rows(resource result)

如:

$sql=mysql_query("select * from tb_book");
......

注:若要获得insert、update、delete语句的所影响到的数据,则必须使用mysql_affected_rows()函数来实现。

.mysql_query(“set names gb”);//设置MySQL的编码格式为
gb类型,以屏蔽乱码。

.关闭记录集:mysql_free_result($sql);

.关闭MySQL数据库服务器:mysql_close($conn);

发表评论

电子邮件地址不会被公开。 必填项已用*标注