phpMysql

来源:互联网 发布:淘宝有限额吗 编辑:程序博客网 时间:2024/06/07 03:55

一、           连接数据库

1.       php7之前连接数据库

$link =mysql_connect(“数据库服务器地址”,”用户名”,”密码”);

Mysql_query(“set  names  网页文件编码名”);或者mysql_set_charset(“网页文件编码名”);

Mysql_query(“use  数据库名”);或者mysql_select_db(“数据库名”);

2.       php7可以使用面向对象和面向过程两种方法操作数据库,如下例:

<?php

       //面向对象方式

       $mysqli = newmysqli("localhost","root","123456","test1");

       //面向对象的方式屏蔽了连接产生的错误,需要通过函数来判断

       if(mysqli_connect_error()){

              echomysqli_connect_error();

       }

       //设置编码

       $mysqli ->query("set  names  uft8");//或者$mysqli - > query("set names'uft8'");

       //关闭连接

       $mysqli -> close();

      

       //面向过程方式的连接方式

       $mysqli =mysqli_connect("localhost","root","123456","test1");

       //判断是否连接陈功

       if(!$mysqli){

              echomysqli_connect_error();

       }

       //关闭连接

       mysqli_close($mysqli);

?>

二、           执行数据库操作语句

1.       php7之前

$result =mysql_query(“select …”);  //参数为sql语句

while( $rec =mysql_fetch_array($result)){

       echo  “<br />f1:” . $rec[‘f1’];

       echo  “||f2:” . $rec[‘f2’];


echo  “||3:”. $rec[‘f3’];

}

2.       php7

如下例子:

<?php

       $mysqli = newmysqli("localhost","root","123456","test1");

       //无结果集示例

       $sql = "insert intotab1 (id,name) values (1,'haha')";

       $result = $mysqli ->query($sql);

       //影响条数

       echo "影响的条数:" . $mysqli -> affected_rows . "<br />";

       //插入的id

       echo "插入的id:" . $mysqli -> insert_id;

       $mysqli -> close();

?>

有结果集的例子。

<?php

       $mysqli = newmysqli("localhost","root","123456","test1");

       //有结果集示例

       $sql = "select * fromtab1";

       $result = $mysqli ->query($sql);

       if($result === false){//执行失败

              echo $mysqli->error;

              echo $mysqli->errno;

       }

       while($row = $result->fetch_assoc()){

              echo $row['id'] .">>" . $row['name'] . "<br />";

       }

       //也可以一次性获得所有数据

       $data = $result->fetch_all(MYSQLI_ASSOC);

       echo "<br/>";print_r($data);

       $mysqli ->close();

?>

三、           利用mysql相关函数以表格样式通用显示的程序

1.       php7之前

<!DOCTYPE html>

<html>

<head>

       <title>数据表格</title>

</head>

<body>

<?php

       $dbname = “php1”;

       If(!empty($_GET[‘db’])){

              $dbname = $_GET[‘db’];

       }

       $link =mysql_connect(“localhost”, “root”, “1234”);

       mysql_query(“set  names utf8”);

       mysql_query(“use $dbname”);

 

       $sql = “select * fromtab1”;

       $sql = “select * fromtab2”;

       $sql = “desc tab_temp1”;

       $sql = “show databases”;

       $sql = “show tables”;

       $result =mysql_query($sql);

       if($result === false){

              echo  “执行失败” . mysql_error();

       }

       else{

              //$result就是“结果集”;

              echo  $result;

              echo  “<table border=’1’>”;

              $field_count =mysql_num_fields($result);//获得列数

              echo  “<tr>”;

              for($1 = 0; $i <$field_count; ++$i){

                     $field_name =mysql_field_name($result, $i);

                     echo  “<td>” . $field_name . “</td>”;

              }

              echo  “</tr>”;

 

              while($rec =mysql_fetch_array($result)){

              //*

                     echo  “<tr>”;

                     //对这个结果集进行“列遍历”

                     for($i = 0;$i <$field; ++$si){

                            $field_name= mysql_field_name($result, $i);

                            echo“<td>” . $rec[$field_name] . “</td>”;

                     }

                     echo  “</tr>”;

              //*/

              }

              echo  “</table>”;

       }

?>

</body>

</html>

2.       php7

<?php

       $dbname ="test1";

       if(!empty($_GET['db'])){

              $dbname =$_GET['db'];

       }

       $mysqli = newmysqli("localhost","root","123456");

       //有结果集示例

       $mysqli->query("use $dbname");

       $sql = "select * fromtab1";

       $sql = "showtables";

       //$sql = "showdatabases";

       $result = $mysqli ->query($sql);

       if($result === false){//执行失败

              echo $mysqli->error;

              echo $mysqli->errno;

       }else{

              echo  "执行成功,数据如下:";

              echo  "<table border='1'>";

              //获得最近一次查询获得的列数

              $field_count =$mysqli ->field_count;

              echo  "<tr>";

              for($i = 0; $i <$field_count; ++$i){

                     $field_name =$result ->fetch_field_direct($i) ->name;

                     echo"<td>" . $field_name . "</td>";

              }

              echo"</tr>";

              while($rec = $result ->fetch_assoc()){

                     echo  "<tr>";

                     for($i =0; $i< $field_count; ++$i){

                            $field_name= $result ->fetch_field_direct($i) ->name;

                            echo  "<td>" . $rec[$field_name] ."</td>";

                     }

                     echo  "</tr>";                 

              }            

              echo"</table>";

       }

       $mysqli ->close();

?>

四、           搭建phpmysadmin数据库管理系统

步骤:

1.       将phpmyadmin的站点文件放置在一个确定的位置,比如和php、apached等文件夹同目录下。

2.       配置apache的conf的extra的httpd_vhost.conf文件,也就是给phpmyadmin配置一个站点

 

<VirtualHost *:80>

       ServerName  www.phpmyadmin.com

       DocumentRoot  "D:/php/amp/phpMyAdmin-4.7.6-all-languages"

       <Directory "D:/php/amp/phpMyAdmin-4.7.6-all-languages">

              Options  Indexes FollowSymLinks

              AllowOverride  none

              Require  all granted

              DirectoryIndex   index.php

       </Directory>

</VirtualHost>

3.       到windows的C:\Windows\System32\drivers\etc\hosts文件中添加一条对应站点域名的解析信息。

127.0.0.1  www.phpmyadmin.com

4.       如果出现mb_detect_encoding()未定义的错误,原因是php的某个模块没有打开。

到php的文件夹中打开php.ini中打开如下模块:

extension=php_mbstring.dll

五、           使用存储过程和存储函数

以php7做例子。

调用存储函数

<?php

       $dbname ="test1";

       if(!empty($_GET['db'])){

              $dbname =$_GET['db'];

       }

       $mysqli = new mysqli("localhost","root","123456");

       $mysqli->query("use $dbname");

       $sql = "insert intotab_int(f1,f2,f3) values(null,2,getMax(1,2,3))";

       $mysqli ->query($sql);     

?>

调用存储过程

<?php

       $dbname ="test1";

       if(!empty($_GET['db'])){

              $dbname =$_GET['db'];

       }

       $mysqli = newmysqli("localhost","root","123456");

       $mysqli->query("use $dbname");

       $s2 = 3;

       $s3 = 4;

       $sql = "callpro2(2,$s2,$s3)";

       $mysqli ->query($sql);     

?>

六、           php7的mysql工具类

<?php

class MysqlUtil{

       private $host;

       private $port;

       private $username;

       private $password;

       private $database;

       private $names;

      

       private static $mysqli =null;

       //用于存储唯一的单例对象

       private static $instance =null;

       static functionGetInstance($config){

              if(!isset(mysqlUtil::$instance)){

                     self::$instance= new self($config);

              }

              returnself::$instance;

       }     

       private function__construct($config){

              $this ->host =!empty($config['host'])?($config['host']):"localhost";

              $this ->port =!empty($config['port'])?($config['port']):"3306";

              $this ->username= !empty($config['username'])?($config['username']):"root";

              $this ->password= !empty($config['password'])?($config['password']):"123456";

              $this ->database= !empty($config['database'])?($config['database']):"test1";

              $this ->names =!empty($config['names'])?($config['names']):"utf8";

              //var_dump(self::$mysqli);

              self::$mysqli = newmysqli("{$this ->host}", "{$this ->username}","{$this ->password}", "{$this ->database}", $this->port);

              //self::$mysqli->query("set names {$this ->names}");           

              $this->setCharset($this ->names);

             

       }

      

       functionsetDatabase($database){

              //var_dump(self::$mysqli);

              self::$mysqli->query("use $database");      

       }

      

       functionsetCharset($charset){

              self::$mysqli->query("set names $charset");

       }     

      

       function close(){

              self::$mysqli->close();

       }

      

       function exec($sql){

              $result =self::$mysqli ->query($sql);

              if($result ===false){

                     //执行语句失败,处理失败的信息

                     echo"<p>sql语句执行失败,请参考如下信息:";

                     echo"<br />错误代号:" . mysqli_errno;

                     echo"<br />错误语句:" . mysqli_error;

                     die();

              }

              return true;

       }     

      

 

       //这个方法是为了执行一条返回一条结果的语句,可以返回一维数组

       //数组的下标就是这个sql语句中取出的字段名

       function GetOneRow($sql){

              $result =self::$mysqli ->query($sql);

              if($result ===false){

                     //执行语句失败,处理失败的信息

                     echo"<p>sql语句执行失败,请参考如下信息:";

                     echo"<br />错误代号:" . mysqli_errno;

                     echo"<br />错误语句:" . mysqli_error;

                     die();

              }

              $rec = $result->fetch_assoc();

              return $rec;

       }

       //这个方法是为了执行一条返回多行数据的语句,它可以返回二维数组

       function GetRows($sql){

              $result =self::$mysqli ->query($sql);

              if($result ===false){

                     //执行语句失败,处理失败的信息

                     echo"<p>sql语句执行失败,请参考如下信息:";

                     echo"<br />错误代号:" . mysqli_errno;

                     echo"<br />错误语句:" . mysqli_error;

                     die();

              }

              //如果没有出错,则开始处理数据,以返回数组,此时$result是一个结果集

              $arr = array();

              while($rec = $result->fetch_assoc()){

                     $arr[] =$rec;

              }

              return $arr;

       }

       //执行一条返回一个数据的语句,可以返回一个直接值

       //类似,select count(*) as c from user_list;

       function GetOneData($sql){

              $result =self::$mysqli ->query($sql);

              if($result ===false){

                     //执行语句失败,处理失败的信息

                     echo"<p>sql语句执行失败,请参考如下信息:";

                     echo"<br />错误代号:" . mysqli_errno;

                     echo"<br />错误语句:" . mysqli_error;

                     die();

              }

              $rec = $result->fetch_row();

              $data = $rec[0];

              return $data;

       }     

}

?>

七、           PDO

Pdo是一个实用的数据操作工具类。使用pdo之前,需要在php.ini中打开php_pdo_mysql.dll。

1.       使用pdo连接mysql 数据库

<?php

$dsn = "mysql:host=localhost; port=3306; dbname=test1";

$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND =>'set names utf8');

$pdo = new PDO($dsn, 'root', '123456', $opt);

var_dump($pdo);      

?>

2.       pdo对象的使用

$result = $pdo->query(“返回结果集的sql语句”);//结果,成功,是一个pdo结果集对象;失败,false。

$result = $pdo->exec(“增删改sql语句”);//结果,成功,true;失败,false。

$pdo = null;//销毁该对象。

$pdo->lastInsertId();//获取最后插入数据的id

$pdo ->beginTransaction();//开启一个事务

$pdo ->commit();//提交一个事务

$pdo ->rollBack();//回滚一个事务

$pdo ->inTransaction();//判断当前是否在事务中

$pdo ->setAttribute(属性名, 属性值);//设置pdo对象的属性值,比如$pdo ->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)

3.       pdo的错误处理

默认,pdo采用静默模式处理错误,就是发生了错误后,并不提示,而只是返回false,需要在程序中判断是否为false,如果是false,再去主动获取错误信息,跟mysql一样。

比如:

$sql = "sleect * from tabl";

$result = $pdo ->query($sql);

if($result === false){

       echo "发生错误";

       echo "<br />错误代号:" . $pdo ->errorcode();

       $arr = $pdo->errorinfo();

       echo "<br />错误信息:" . $arr[2];

}else{

       ……

}

4.       异常模式

是为适应面向对象语法的处理错误的一种语法形式,如下所示:

Try{

       可以执行可能出错的语句;

       一旦发生错误,就会终止当前范围的后续代码执行;

       而立即跳转到catch部分—处理错误。

}catch(Exception  $e){

       一但发生错误,就进入这里,此时,并会生成一个错误对象;

       该错误对象,就是系统类exception的一个实例,它包含了错误信息。

}

如果pdo要使用异常模式,就需要专门设置(默认是静默模式)。方法是:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

设置后,异常模式的例子:

try{

       $sql = "insert table(null,13);";

       $result = $pdo->exec($sql);

       echo "执行成功";

}catch(Exception $e){//$e就是错误对象

       echo "发生错误";

       echo "<br />错误代号:" . $e ->GetCode();

       echo "<br />错误信息:" . $e ->GetMessage();

}     

5.       pdo的结果集对象

来自pdo对象执行返回数据的sql语句,得到的就是pdo的结果集对象。

$result = $pdo->query(“select ……”);

结果集对象的常用方法:

$result = $pdo->query(“select ……”);

$result->rowCount();//得到结果集的行数

$result ->columnCount();//得到结果集的列数

$result ->fetch([返回类型]);//从结果集中取出一行数据

常用的返回类型有:

PDO::FETCH_ASSOC,表示关联数组;

PDO::FETCH_NUM,表示索引数组;

PDO::FETCH_BOTH,表示前二者都有,这是默认项;

PDO::FETCH_OBJ,表示对象;

比如:

$sql = "select * from stu1";

$result = $pdo ->query($sql);

$re1 = $result ->fetch(PDO::FETCH_ASSOC);

$re2 = $result ->fetch(PDO::FETCH_NUM);

$re3 = $result ->fetch(PDO::FETCH_BOTH);

echo "<br />";print_r($re1);

echo "<br />";print_r($re2);

echo "<br />";print_r($re3);

$result ->fetchAll([返回类型]);//一次性获取结果集中所有数据

$result ->fetchColumn([$i]);//获取结果集中的下一行第$i个字段的值,结果是一个标量数据,相当于自定义的GetOneData();

$result ->fetchObject();//

$result ->errorCode();//结果集的错误代号

$result ->errorInfo();//结果集的错误信息(一个数组)

$result ->closeCursor();//关闭结果集

6.       pdo中的预处理语法

预处理语法就是为了执行多条结构类似的sql语句,而将该sql语句的形式进行预先处理(编译),该sql语句的形式中,含有未给定的数据项。然后,到正式执行的时候,只要给定相应的形式上的数据项,就可以更快速方便的执行。有两种形式。

语法1:

$sql  =  “select *  from  tab  where id  =  ?”;  //这里的?就是未给定的数据项,也可以是多个,通常称?为占位符

语法2:

$sql  =  “select  * from  tab  where id  =  :v1 and  name  =  :v2”;   //这里的v1和v2就是未给定的数据项。通常称为命名参数。

使用步骤:

对含有预处理语法的sql语句进行预处理

$stmt  =  $pdo ->prepare($sql);

对上述预处理的结果对象($stat)的未赋值数据,进行赋值

$stmt  ->bindValue(数据项1, 值1);

$stmt  ->bindValue(数据项2, 值2);

……

执行

$stmt  ->execute();

至此,这条sql语句正式完成。

占位符预处理的例子:

<?php

$dsn = "mysql:host=localhost; port=3306; dbname=test1";

$opt = array(PDO::MYSQL_ATTR_INIT_COMMAND =>'set names utf8');

$pdo = new PDO($dsn, 'root', '123456', $opt);

$sql = "select * from stu1 where id = ? and username = ?";

$stmt = $pdo ->prepare($sql);

$stmt ->bindValue(1,1);

$stmt ->bindValue(2,'hah2');

$stmt ->execute();

$arr = $stmt ->fetch(PDO::FETCH_ASSOC);

print_r($arr);

?>

可变参数预处理的例子:

$sql = "select * from stu1 where id = :v1 and username =:v2";

$stmt = $pdo ->prepare($sql);

$stmt ->bindValue(':v1',1);

$stmt ->bindValue(':v2','hah2');

$stmt ->execute();

$arr = $stmt ->fetch(PDO::FETCH_ASSOC);

print_r($arr);

也可以绑定变量,语法为:

$stmt  ->bindParam(命名参数或占位符号,变量,[类型]);  

//类型为可选项,包括:POD::PARAM_BOOL, POD::PARAM_NULL, POD::PARAM_INT, POD::PARAM_STR,POD::PARAM_BLOB。PARAM_INPUT_OUTPUT,表示参数是可传出值的。

执行方式也有多种,

方式一,$stmt ->execute();   //前提是见面进行了绑定操作。

方式二,$stmt ->execute(array(“:val1” =>值1, “:val2” =>值2));   //对应命名参数形式。

方式三,$stmt ->execute(array(值1,值2));  //对应占位符形式。

 


原创粉丝点击