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)); //对应占位符形式。
- phpMysql
- phpmysql分页
- phpmysql随记
- GuestBook For PHPMySql
- phpmysql的后续配置
- phpMySQL录入数据
- wamp phpmysql 修改密码
- phpmysql登陆报错 #1862
- CentOS安装Apache,PHP,PHPMySQL支持
- 使用PhpMysql实现图片文件上传下载
- 《PHPMySQL和Apache编程导学》
- phpmysql操作函数类(pdo)
- !!!phpmysql更新操作字段自增一(三种引号)
- 原生php mysql 查询出数组,为什么只查询出一条数据,封装的phpmysql类
- win8没有声音怎么办?win8系统电脑没有声音的解决方法
- 扫雷游戏(第一次踩到雷不会被炸死)
- scikit-learn 中文文档-预测目标 (y) 的转换-用户指南|ApacheCN
- socket编程
- 线段树+区间xor+区间求和
- phpMysql
- HTML5(十七)
- 学习Spring框架笔记之基于xml的IOC配置
- Ajax
- 独家 | 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
- 重磅 | 2017年深度学习优化算法研究亮点最新综述火热出炉
- 马斯克要往火星轨道送跑车,在深空待10亿年,静候外星人
- HTML5(十八)
- 第31届NIPS正式开幕,3240篇提交论文创历史新高,公布3篇最佳论文