PHP之认识PHP(四)数据库

1、MySQL是什么

  • MySQL 是一种在 Web 上使用的数据库系统。

  • MySQL 是一种在服务器上运行的数据库系统。

  • MySQL 不管在小型还是大型应用程序中,都是理想的选择。

  • MySQL 是非常快速,可靠,且易于使用的。

  • MySQL 支持标准的 SQL。

  • MySQL 在一些平台上编译。

  • MySQL 是免费下载使用的。

  • MySQL 是由 Oracle 公司开发、发布和支持的。

  • MySQL 是以公司创始人 Monty Widenius's daughter: My 命名的。

MySQL 中的数据存储在表中。表格是一个相关数据的集合,它包含了列和行。

在分类存储信息时,数据库非常有用。一个公司的数据库可能拥有以下表:

  • Employees

  • Products

  • Customers

  • Orders

MySQL数据库的安装 http://www.mysql.com

2、连接数据库

连接数据库的方法有3种

  • MySQLi (面向对象)
  • MySQLi (面向过程)
  • PDO

PDO的安装http://php.net/manual/en/pdo.installation.php

<?php 
$servername = "localhost";//主机名
$username = "root";     //用户名
$password = "123456";   //密码 

try { 
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); 
    echo "Connected successfully";    
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 
?>

注意:

*当你创建一个新的数据库时,你必须为 mysqli 对象指定三个参数 (servername, username 和 password)。

*如果你使用其他端口(默认为3306),为数据库参数添加空字符串,如: new mysqli("localhost", "username", "password", "", port)

*在使用PDO连接数据库的时候必须设置数据库名。

3、关闭数据库

$conn = null;

4、创建数据库

<?php
   try{
	   $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
	   
	   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);	
			//PDO::ATTR_ERRMODE:错误报告。
		         //PDO::ERRMODE_EXCEPTION: 抛出 exceptions 异常。
	   $sql = "CREATE DATABASE myDBPDO";		//设置sql语句
	   
	   $conn->exec($sql);				//执行sql语句
	   
	   echo "Database created sucessfully<br/>";
   }catch(PDOException $e){
	   echo $sql."<br/>".$e->getMessage();
   }finally{
		$conn = null;
   }
?>

5、创建数据表

在设置了数据类型后,你可以为每个列指定其他选项的属性:

  • NOT NULL - 每一行都必须含有值(不能为空),null 值是不允许的。

  • DEFAULT value - 设置默认值

  • UNSIGNED - 使用无符号数值类型,0 及正数

  • AUTO INCREMENT - 设置 MySQL 字段的值在新增记录时每次自动增长 1

  • PRIMARY KEY - 设置数据表中每条记录的唯一标识。 通常列的 PRIMARY KEY 设置为 ID 数值,与AUTO_INCREMENT 一起使用。

每个表都应该有一个主键(本列为 "id" 列),主键必须包含唯一的值。

以下实例展示了如何在 PHP 中创建表:

<?php
   $servername = "localhost"; 
   $username = "root"; 
   $password = "123456";
   $dbname = "myDBPDO";
   try{
	   $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
	   
	   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
	   
	   $sql = "CREATE TABLE MyGuests(
		id INT(6)  UNSIGNED AUTO_INCREMENT PRIMARY KEY,
		firstname VARCHAR(30) NOT NULL,
		lastname VARCHAR(30) NOT NULL,
		email VARCHAR(50),
		reg_date TIMESTAMP
	   )";
	   
	   $conn->exec($sql);
	   echo "Table MyGuests created successfully";
   }catch(PDOException $e){
	   echo $sql . "<br>" . $e->getMessage();
   }finally{
	   $conn = null;
   }
?>

6、插入数据

在创建完数据库和表后,我们可以向表中添加数据。

以下为一些语法规则:

  • PHP 中 SQL 查询语句必须使用引号

  • 在 SQL 查询语句中的字符串值必须加引号

  • 数值的值不需要引号

  • NULL 值不需要引号

INSERT INTO 语句通常用于向 MySQL 表添加新的记录:

INSERT INTO table_name (column1, column2, column3,...)        
VALUES (value1, value2, value3,...)

注意: 如果列设置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我们就不需要在 SQL 查询语句中指定值; MySQL 会自动为该列添加值。

<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";
    try{
   	   $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
   	   
   	   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   	   
   	   $sql = "INSERT INTO MyGuests(firstname,lastname,email)
		VALUES('JOHN','Doe','john@example.com')
	   ";
   	   
   	   $conn->exec($sql);
   	   echo "New record created successfully"; 
   }catch(PDOException $e){
   	   echo $sql . "<br>" . $e->getMessage();
   }finally{
   	   $conn = null;
   }  
?>

7、插入多条数据

<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";
    try{
  	   $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
  	   
  	   $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  	   
	   $conn->beginTransaction();	//开始事务
	      
  	   $conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
		VALUES('John','Doe','john@example.com')");
	   
	   $conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
	    VALUES('Mary','Moe','Mary@example.com')");
			
		$conn->exec("INSERT INTO MyGuests(firstname,lastname,email)
		 VALUES('Julie','Dooley','Julie@example.com')");
	   
	   $conn->commit();				//结束事务
	   
  	   echo "New records created successfully";
  }catch(PDOException $e){
	  $conn->rollback();
  	   echo $sql . "<br>" . $e->getMessage();
  }finally{
  	   $conn = null;
  }  
?>

8、使用预处理语句

MySQL 预处理语句不仅大大减少了需要传输的数据量,还提高了命令的处理效率。


预处理语句对于防止 MySQL 注入是非常有用的。


预处理语句及绑定参数

预处理语句用于执行多个相同的 SQL 语句,并且执行效率更高。

预处理语句的工作原理如下:

  1. 预处理:创建 SQL 语句模板并发送到数据库。预留的值使用参数 "?" 标记 。例如:INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)

  2. 数据库解析,编译,对SQL语句模板执行查询优化,并存储结果不输出

  3. 执行:最后,将应用绑定的值传递给参数("?" 标记),数据库执行语句。应用可以多次执行语句,如果参数的值不一样。

相比于直接执行SQL语句,预处理语句有两个主要优点:

  • 预处理语句大大减少了分析时间,只做了一次查询(虽然语句多次执行)

  • 绑定参数减少了服务器带宽,你只需要发送查询的参数,而不是整个语句

  • 预处理语句针对SQL注入是非常有用的,因为 参数值发送后使用不同的协议,保证了数据的合法性。

<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";
    
    try{
		$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
		   
		$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
		//预处理SQL语句并绑定参数
		$stmt = $conn->prepare("INSERT INTO MyGuests(firstname,lastname,email)
		VALUES(:firstname,:lastname,:email)");
		$stmt->bindParam(':firstname',$firstname);
		$stmt->bindParam(':lastname',$lastname);
		$stmt->bindParam(':email',$email);
		
		//插入行
		$firstname="li";
		$lastname="long";
		$email="1715453224@qq.com";
		$stmt->execute();
		
		//插入其他行
		$firstname="yi";
		$lastname="zhe";
		$email="1314520@qq.com";
		$stmt->execute();
		   
		//插入其他行   
		$firstname="su";
		$lastname="ruiqi";
		$email="5520520@qq.com";
		$stmt->execute();
		echo "New records created successfully";
	}catch(PDOException $e){
		echo $sql . "<br>" . $e->getMessage();
	}finally{
		$conn = null;
	}  
?>

9、读取数据

当 PHP 连接到 MySQL 数据库后,需要向数据库读取数据?那么怎么读取呢?一起来看看。

SELECT 语句用于从数据表中读取数据:

SELECT column_name(s) FROM table_name
<?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";

    echo "<table style='border: solid 1px black;'>";//打印表格,设置表格属性
    echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th><th>Email</th><th>Reg date</th></tr>";

    class TableRows extends RecursiveIteratorIterator { //继承迭代器
        function __construct($it) { 
            parent::__construct($it, self::LEAVES_ONLY); 
        }

        function current() {
            return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
        }

        function beginChildren() { 
            echo "<tr>"; 
        } 

        function endChildren() { 
            echo "</tr>" . "
    ";
        } 
    } 

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("SELECT * FROM MyGuests"); //预处理SQL语句
        $stmt->execute();                                 //执行预处理语句

        // 设置结果集为关联数组
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); //获取模式

        foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) { 
            echo $v;                                        //fetchAll返回多个行记录
        }
       
     }catch(PDOException $e){
                echo "Error: " . $e->getMessage();
     }finally{
            $conn = null;
     }
    echo "</table>";
?>

10、Where子句

WHERE 子句用于提取满足指定标准的的记录。

语法:

SELECT column_name(s)
 FROM table_name
 WHERE column_name operator value
<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";    

    $conn = new mysqli($servername, $username, $password,$dbname);
	 
    if(mysqli_connect_errno()){
	echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $result = mysqli_query($conn,"select * from MyGuests
    where firstname='john'");
	
    if(!$result){
        printf("Error: %s\n", mysqli_error($conn));
        exit();
    }
    while($row = mysqli_fetch_array($result)){
	echo $row['firstname'] . " " . $row['lastname'];
	echo "<br>";
    }
 ?>

11、Order By关键词

ORDER BY关键词用于对记录集中的数据进行排序。

ORDER BY关键词默认对记录进行升序排序。

如果你想降序排序,请使用 DESC 关键字。

语法:

SELECT column_name(s)
 FROM table_name
 ORDER BY column_name(s) ASC|DESC
<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";

    $conn = new mysqli($servername, $username, $password,$dbname);
		 
    if(mysqli_connect_errno()){
	echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

    $result = mysqli_query($conn,"select * from MyGuests
    order by firstname");
	
    if (!$result){
	printf("Error: %s\n", mysqli_error($conn));
	exit();	
    }
    while($row = mysqli_fetch_array($result)){
	echo $row['firstname'] . " " . $row['lastname'];
	echo "<br>";
    }
    mysqli_close($conn);
?>

11.1根据两列进行排序

可以根据多个列进行排序。当按照多个列进行排序时,只有第一列的值相同时才使用第二列:

SELECT column_name(s)
 FROM table_name
 ORDER BY column1, column2

12、Update

UPDATE 语句用于更新数据库表中已存在的记录。

语法:

UPDATE table_name
 SET column1=value, column2=value2,...
 WHERE some_column=some_value

注释:请注意 UPDATE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要更新。如果您想省去 WHERE 子句,所有的记录都会被更新!

如需学习更多关于 SQL 的知识,请访问我们的 SQL 教程

为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。

<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";
    
    $conn = new mysqli($servername, $username, $password,$dbname);
   	 
    if(mysqli_connect_errno()){
   	echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
   
    $result = mysqli_query($conn,"update MyGuests set email='110@qq.com' where firstname='yi' and lastname='zhe'");
   
    echo "Update records successfully";
    mysqli_close($conn);
?>

13.Delete From

DELETE FROM 语句用于从数据库表中删除记录。

语法

DELETE FROM table_name
WHERE some_column = some_value


注释:请注意 DELETE 语法中的 WHERE 子句。WHERE 子句规定了哪些记录需要删除。如果您想省去 WHERE 子句,所有的记录都会被删除!

如需学习更多关于 SQL 的知识,请访问我们的 SQL 教程

为了让 PHP 执行上面的语句,我们必须使用 mysqli_query() 函数。该函数用于向 MySQL 连接发送查询或命令。

实例:

<?php
    $servername = "localhost"; 
    $username = "root"; 
    $password = "123456";
    $dbname = "myDBPDO";

    $conn = new mysqli($servername, $username, $password,$dbname);
   	 
    if(mysqli_connect_errno()){
		echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
   
    $result = mysqli_query($conn,"delete from MyGuests where firstname='yi'");
   
    echo "Delete records successfully";
   
    mysqli_close($conn);
?>

14、数据库ODBC

ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数据库)。

创建ODBC连接

通过一个 ODBC 连接,您可以连接到您的网络中的任何计算机上的任何数据库,只要 ODBC 连接是可用的。

这是创建到达 MS Access 数据库的 ODBC 连接的方法:

  1. 在控制面板中打开管理工具图标。
  2. 双击其中的数据源(ODBC)图标。
  3. 选择系统 DSN 选项卡。
  4. 点击系统 DSN 选项卡中的添加
  5. 选择Microsoft Access Driver。点击完成
  6. 在下一个界面,点击选择来定位数据库。
  7. 为数据库起一个数据源名(DSN)
  8. 点击确定

请注意,必须在您的网站所在的计算机上完成这个配置。如果您的计算机上正在运行 Internet 信息服务(IIS),上面的指令将会生效,但是如果您的网站位于远程服务器,您必须拥有对该服务器的物理访问权限,或者请您的主机提供商为您建立 DSN。

 <html>
 <body>

 <?php
   $conn=odbc_connect('northwind','','');//DSN连接
	
   if(!$conn){
       exit("Connection Failed: " . $conn);
   }
	
   $sql="select * from customers";
   $rs=odbc_exec($conn,$sql);//执行SQL语句,并返回到数据集
    
   if(!$rs){
       exit("Error in SQL");
    }
	
    echo "<table><tr>";
    echo "<th>Companyname</th>";
    echo "<th>Contactname</th></tr>";
    
    while (odbc_fetch_row($rs)){	//取回数据集
        $compname=odbc_result($rs,"CompanyName");
	$conname=odbc_result($rs,"ContactName");
	echo "<tr><td>$compname</td>";
	echo "<td>$conname</td></tr>";
    }
    odbc_close($conn);
    echo "</table>";
 ?>

 </body>
 </html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值