连接MySQL服务器
建立与MySQL数据库的连接,使用mysqli_connect()函数,它的语法格式如下:
mysqli mysqli_connect ([string server[, string username[, string password[, string dbname[, int port[, string socket]]]]]])
它的参数含义如下:
server:可选参数,MySQL服务器地址。username:可选参数,MySQL服务器用户名。password:可选参数,MySQL服务器用户密码。dbname:可选参数,要连接的数据库名字。port:可选参数,MySQL服务器的端口号,默认3306。socket:可选参数,使用设置的socket或者pipe。注意:前四个参数比较常用,后两个很少用到。
PHP选择MySQL数据库
PHP提供了mysqliselectdb()函数来选择MySQL数据库,它的语法格式如下:
<?php$server = "localhost"; $username = "root"; $password = "123456"; $dbname = "php_db"; // 快速写法 $mysqli = new mysqli ( $server, $username, $password, $dbname ); // 兼容写法 $mysqli = new mysqli ( $server, $username, $password ); mysqli_select_db ( $mysqli, $dbname ); // 对象写法 $mysqli = new mysqli (); $mysqli->connect ( $server, $username, $password ); $mysqli->select_db ( $mysqli, $dbname );?>
断开MySQL服务器
使用mysqli_close()函数来关闭与MySQL服务器的连接。
执行SQL语句
数据库的“增删改查”说到底都是一句SQL语句,PHP提供了mysqli_query()函数来执行SQL语句,它的语法如下:
mixed mysqli_query (mysqli link, string query[, int resultmode])
link : 是调用mysqli_connect()函数返回的mysqli对象,
query : 是要执行的SQL语句,
resultmode : 是可选参数,它的默认值是MYSQLISTORERESULT,如果需要查询的数据量很大,需要使用MYSQLIUSERESULT。
<?php$server = "localhost"; $username = "root"; $password = "123456"; $dbname = "account_db"; $mysqli = new mysqli ( $server, $username, $password, $dbname ); // 增 $result = mysqli_query ( $mysqli, "insert into account(username, password, email) values('张三', '123456', 'zhangsan@example.com')" ); // 删 $result = mysqli_query ( $mysqli, "delete from account where user='张三'" ); // 改 $result = mysqli_query ( $mysqli, "update account set password='abcdefg' where user='张三'" ); // 查 $result = mysqli_query ( $mysqli, "select * from account " ); mysqli_close ( $mysqli );?>
面向对象的编程-抽象类和接口「程序员培养之路第四十六天」
面向对象的编程-__autoload()「程序员培养之路第四十五天」
面向对象的编程-多态「程序员培养之路第四十四天」
SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。SQL注入通常由于执行sql语句时,没有对用户通过Web表单提交的参数或者查询的字符串没有进行特殊字符过滤等,导致欺骗服务器执行恶意SQL命令。
为了防止这种情况,写脚本文件的时候,通常会考虑防止SQL注入,最简单的办法就是使用预处理语句,因为预处理语句事先已经编译了语句,传递的参数是不参与解释的。
PHP附录:
PHP的报错级别
$_SERVER参数
PHP操作MySQL-解析结果集「程序员培养之路第五十一天」
PHP操作MySQL-预处理语句「程序员培养之路第五十天」
PHP操作MySQL-其他「程序员培养之路第四十九天」
1.解压客户端放到一个目录下,新建tnsnames.ora放到客户端文件夹的子目录下。
2.加入以下代码:est_db是自己起的连接名字,IP替换为远程oracle的IP,service_name放数据库名字
3.开启php的oci扩展或者pdo_oci扩展,连接测试。
php7因为没有带php_oci_11g的扩展,需要自己安装获取去下载对应版本的dll文件,放到php的ext目录下,在php.ini中开启扩展。
在开启后可能会出现windows缺失oci.dll文件。
4.将上面客户端里面的oci.dll文件拷贝到php的目录下即可--》启动php,查看PHPinfo里面应该会出现如下扩展:
5.测试尝试连接数据库代码:
6.PDO方式会抛出如下的异常(SQLSTATE[]: pdo_oci_handle_factory: <<Unknown>> (ext\pdo_oci\oci_driver.c:642))
这时候如果把刚才拷贝到php目录下的文件删除的话,有些被用到肯定就不能删,经过测试,只有下面这个文件和刚才的oci.dll文件不能删除。
7.还有个特点就是很大,里面封装了很多函数扩展什么的。
现在就大功告成了,在此测试一下上面的PHP代码:
【IT科技之家-itkeji综合 -文章版权声明】
非特殊说明,本文版权归 [ IT科技之家-itkeji综合 -ITMFB] 所有,转载请注明出处.
PHP连接mysql数据库是PHP新手们必须要掌握的一项技能,只要掌握了PHP对数据库进行增删改查等操作,就可以写出一些简单且常见的程序。如留言表,新闻页等。本篇文章主要给大家详细介绍PHP连接Mysql数据库的两种常用方法。
下面我们通过具体的代码示例来给大家详细介绍两种PHP连接mysql数据库的方法。
mysqli连接数据库和pdo连接数据库。
第一种方法:使用mysqli连接mysql数据库
代码实例如下:
<?php
$host='127.0.0.1';
$user='root';
$password='root';
$dbName='php';
$link=new mysqli($host,$user,$password,$dbName);
if ($link->connect_error){
die("连接失败:".$link->connect_error);
}
$sql="select * from admins";
$res=$link->query($sql);
$data=$res->fetch_all();
var_dump($data);
在经过一系列的连接操作后,我们再创建一个sql语句对其中数据表进行查询检验。在上述代码中,我们要先创建一些需要用到的变量,如数据库用户名、数据库名密码等。然后我们用面向对象的方式连接了名为php的数据库。再通过if条件语句,connect-error方法判断PHP连接数据库是否成功。
这里我们先登录phpmyadmin看看是否存在php数据库,从下图可以知道是存在php这个数据库的。
最后通过浏览器访问,结果如下图:
从图中可以得知,我们成功地连接了php数据库,并且能查询出数据表信息。
第二种方法:使用PDO连接数据库
代码示例如下:
<?php
$host='127.0.0.1';
$user='root';
$password='root';
$dbName='php';
$pdo=new PDO("mysql:host=$host;dbname=$dbName",$user,$password);
$sql="select * from admins";
$data=$pdo->query($sql)->fetch();
var_dump($data);
PHP连接Mysql步骤以上就是关于PHP连接数据库查询数据的两种常用方法详解,更多相关教程请访问php中文网mysql视频教程,欢迎参考学习!
PDO提供对预处理语句的支持。
预处理语句是预先将一个预处理的sql语句发送到数据库服务器,执行其他sql语句只是修改预处理语句里对应的参数。简单的说,就是将sql语句强制一分为二:第一部分为前面相同的命令和结构部分,第二部分为后面可变的数据部分。预处理语句,可以减轻数据库服务器压力。
MySQL定义预处理语句
使用prepare()方法执行sql预处理语句,得到一个PDOStatement实例,sql预处理语句通常有如下两种定义方式:
命名参数:自定义的有意义的字符串作为命名参数,前面加上冒号。insert into table_name(name,password,email) values(:name,:password,:email)
问号数据占位符:使用“?”作为参数。insert into table_name(name,password,email) values(?,?,?)
绑定参数
往预处理语句绑定参数有三种方法:
bindParam()方法一个一个绑定,绑定完成执行execute()方法使之生效。bindValue()方法一个一个绑定,绑定完成执行execute()方法使之生效。直接使用execute()方法传递一个数组,命名参数使用关联数组,数据占位符使用索引数组。<?php echo "<pre>"; $dbms = "mysql"; $server = "localhost"; $username = "root"; $password = "123456"; $dbname = "account_pdo_db"; $dsn = "$dbms:host=$server;dbname=$dbname"; try { $pdo = new PDO ( $dsn, $username, $password ); echo "PDO连接MySQL数据库服务器成功"; // 数据占位符 $pre = $pdo->prepare("insert into account(username, password, email) values (?,?,?)"); $name = "Peter"; $pwd = "333333"; $pre->bindParam ( 1, $name ); $pre->bindValue ( 2, $pwd ); $pre->bindValue ( 3, "Peter@example.com" ); $pre->execute (); $name = "张三"; $pre->execute (array($name,"1245","zhangsan@example.com")); // 命名参数 $pre = $pdo->prepare("insert into account(username, password, email) values (:name,:pwd,:email)" ); $name = "老王"; $pwd = "00544abc"; $email = "laowang@example.com"; $pre->bindParam ( ":name", $name ); $pre->bindParam ( ":pwd", $pwd ); $pre->bindParam ( ":email", $email ); $pre->execute(); $name = "柴科夫斯基"; $pre->execute(array(":name"=>$name,":pwd"=>"love",":email"=>"abc@abc.com")); $pdo = null; } catch ( PDOException $e ) { echo "PDO连接MySQL数据库服务器失败"; die(); }?>
PHP操作MySQL-其他「程序员培养之路第四十九天」
PHP操作MySQL-访问数据库「程序员培养之路第四十八天」
PHP操作MySQL-介绍和配置「程序员培养之路第四十七天」
解析结果集
PDO(PHP Data Object)
PDO是PHP数据对象的英文缩写,英文全称为PHP Data Object,是又MySQL官方封装的、基于面向对象编程思想的、使用C语言开发的数据库抽象层。
配置PDO
Windows下启动PDO需要在“php.ini”文件中进行配置,添加扩展:
extension=php_pdo.dll
在最新版PHP中,PDO已经默认开启,只需要启动其他数据库扩展即可。配置好这些后重启Apache服务。执行phpinfo()函数,看到PDO配置项,说明开启成功。
MySQL访问数据库
与mysqli扩展类似,PDO扩展也是实例一个PDO对象,然后可以调用相关方法和属性来执行数据库的操作。
连接服务器
使用PDO与服务器建立连接,需要先使用构造方法来创建PDO实例,PDO的构造方法如下:
_construct(stringdata_source_name [,string user[,string pwd[,array driver_options]]])
datasourcename : 数据源,该参数包括了数据库名,主机名。MySQL数据库的DSN为:“mysql:host=localhost;dbname=account_db; port=3306”
user:数据库服务器用户名
pwd:为数据库服务器密码
数据库连接成功后,将返回一个PDO的实例,连接失败将会抛出一个PDOException异常,通常会使用try/catch语句进行处理。
关闭数据库
要想关闭连接,需要销毁对象以确保所有到它的引用都被删除,可以给变量赋一个NULL。
执行SQL语句
PDO提供了三种执行SQL语句的方法,分别是exec(),query(),预处理语句。
exec()
exec()方法可以执行一条语句,并返回受影响的行数,它的语法格式如下:
int PDO::exec(String sql)
exec()方法通常用于insert into,delete,update等语句。
<?phpecho "<pre>"; $dbms = "mysql"; $server = "localhost"; $username = "root"; $password = "123456"; $dsn = "$dbms:host=$server"; try { $pdo = new PDO ( $dsn, $username, $password ); echo "PDO连接MySQL数据库服务器成功"; print ($pdo->exec ( "create database account_pdo_db" )) ; print ($pdo->exec ( "use account_pdo_db" )) ; print ($pdo->exec ( "set names utf8" )) ; print ($pdo->exec ( "create table account(id int auto_increment primary key, username varchar(50) not null, password varchar(50) not null, email varchar(50) not null)" )) ; print ($pdo->exec ( "insert into account(username, password, email) values ('Jack', '123456', 'jack@example.com')" )) ; print ($pdo->exec ( "insert into account(username, password, email) values ('Lucy', '123456', 'lucy@example.com')" )) ; $pdo = null; } catch ( PDOException $e ) { echo "PDO连接MySQL数据库服务器失败"; die (); }?>
query()
query()方法不同于exec(),通常用于select语句中,它的返回值是PDOStatement的实例,是POD里的结果集。它的语法如下:
PDOStatement PDO::query(String sql)
<?phpecho "<pre>";$dbms = "mysql";$server = "localhost";$username = "root";$password = "123456";$dbname = "account_pdo_db";$dsn = "$dbms:host=$server;dbname=$dbname";try {$pdo = new PDO ( $dsn, $username, $password ); echo "<p>PDO连接MySQL数据库服务器成功</p>"; $result = $pdo->query ( "select * from account" ); foreach ( $result as $row ) { var_dump ( $row ); } $pdo = null;} catch ( PDOException $e ) { echo "PDO连接MySQL数据库服务器失败"; die ();}?>
知识点:
涉及函数:
//打开文件fopen(string $filename,string $mode); //给文件写入内容fwrite($fp, $a); //关闭资源fclose($fp);//从文件指针中读入一行并解析 CSV 字段fgetcsv(resource $handle);本文只讲解案例和抽选相关函数讲解,更多知识点移步:菜鸟教程
如上图案例结构图,按照阁主流程和思路将讲解如何创建msg.txt文本文档,并使用PHP对文档进行写入和读取操作,最后输出可视化展现给用户。
1.创建并打开msg.txt文档
文档存放与根目录下的files文件夹下。
//a参数为写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 $fp= fopen('./files/msg.txt','a');网而打开write.php会发现files文件夹下多出msg.txt空白内容的文档。
2.前端提交留言:
这里写了一个简单的前台提交表单页面。下列代码会将表单信息以POST提交方式提交往write.php进行后续写入处理。
<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>添加留言</title></head><body><form action="write.php" method="post"> 标题: <input type="text" name="title" id=""><br /> 内容: <textarea name="content" id="" cols="30" rows="10"></textarea><br /> <input type="submit" value="提交"></form></body></html>效果:
3.将前台提交留言写入msg.txt。
//拼接写入内容$a=$_POST['title'].','.$_POST['content']."\n";//打开文件$fp= fopen('./files/msg.txt','a');//沿着资源写入内容fwrite($fp, $a);//关闭资源fclose($fp);//友好提示echo 'Is OK';效果:这里只查看文档内容情况。
4.读取文档内容。
使用while循环输出文档内容。fgetcsv函数依据文档内的逗号来隔开字符并以数组形式存放。
$fp = fopen('./files/msg.txt', 'r');echo '<table border="1">';//fgetcsv函数指针识别到最后没内容会返回false.while (($row = fgetcsv($fp)) != false) { echo '<tr>'; echo '<td>' . $row[0] . '</td>'; echo '<td>' . $row[1] . '</td>'; echo '</tr>';}echo '</table>';fclose($fp);效果:
5.id传参教学。
其实教程到第4步应该结束了,但是想一想最后展示的留言内容太多,不利于用户自己查看,随后补了一个id传参知识点。使用id传参可以准确的让PHP帮我们处理并输出单条留言信息。
在第四步的基础上改写一下,也就是加入了<a>标签进行传参进行跳转相应留言字段。
$fp = fopen('./files/msg.txt', 'r');echo '<table border="1">';$tid = 1;while (($row = fgetcsv($fp)) != false) { echo '<tr>'; echo '<td><a href="'.'read2.php?tid='.$tid.'">' . $row[0] . '</td>'; echo '<td>' . $row[1] . '</td>'; echo '</tr>'; $tid = $tid + 1;}echo '</table>';接下来新建read2.php文件,键入下列代码,用于接收read.php发过来的参数并处理展现单条留言给用户。
$fp = fopen('./files/msg.txt', 'r');$tid = $_GET['tid'];$num = 1;while (($row = fgetcsv($fp)) != false) { if ($num == $tid){ echo '<h1>'.$row[0].'</h1>'; echo '<p>'.$row[1].'</p>'; } $num = $num+1;}fclose($fp);效果:
结束:
最终效果演示:
项目源码:
蓝奏云提供下载:
file_demo1.zip大小:2.2 K
已经过安全软件检测无毒,请您放心下载。
PDO为PHP访问各类数据库定义了一个轻量级一致性的接口,无论什么数据库,都可以通过一致的方法执行查询和获取数据,而不用考虑不同数据库之间的差异,大大简化了数据库操作。使用PDO可以支持mysql、postgresql、oracle、mssql等多种数据库。
本文以基础讲解常用的PHP以PDO方式操作MySQL,包括常用的CURD语句执行,以及预处理语句和事务的应用。虽然很多朋友使用开发框架封装好了数据库操作层,或者使用ORM等不直接接触SQL语句,但是在一些小项目中可能会用到原生的数据库操作,所以虽然是基础但是很有用。
准备
我们准备一张mysql数据表mycomments,这是一张常见的评论表。
连接
首先创建PDO对象,建立与数据库服务器的连接。
PDO::setAttribute()用于设置属性,如上面的代码中就设置了使用异常模式处理错误。
查询
如果我们不使用预处理语句,可以直接使用query()和exec()方法执行sql语句。
而实际开发中我们最常用的是预处理语句,简单的说预处理语句预先将sql命令分析一次,可以多次执行,提高了处理效率,而且能有效防止SQL注入。在执行单个查询时快于直接使用query()或exec()的方法,速度快且安全,所以强烈推荐使用预处理语句。
使用预处理语句处理时配套的方法是prepare()和execute()。
我们用预处理语句来查询符合条件的数据记录:
我们在sql语句中使用问号(?)参数作为占位符,使用bindParam()可以设置绑定参数值。
不过,如果有很多参数需要传递,我们最常用的是这样写:
在execute()方法中加入参数占位符数组,不使用?占位符可能更直观点。
fetch()返回查询结果中的一行数据,数据以数组形式返回,该方法可以带参数,其中参数默认为 PDO::FETCH_BOTH,即返回一个索引为结果集列名和以0开始的列号的数组,而常用的参数PDO::FETCH_ASSOC则返回一个索引为结果集列名的数组。
fetchAll()可以获取结果集中的所有行,并赋给返回的二维数组。和fetch()一样也可以带参数。
如查询表中用户id为2的所有数据,可能会有多行结果:
打印$row结果看下,是不是一个二维数组?
插入
最常用的插入数据表的写法,如果有自增长id(一般必须有),使用lastInsertId()可以获取到插入成功后的id。
更新
使用预处理更新数据,rowCount()返回影响行数,大于0即表示执行成功的记录数。
删除
对于只有一个参数需要绑定的,可以使用问号?占位符。删除后同样使用rowCount()返回影响行数,大于0表示执行成功。
事务
事务是确保数据库一致的机制,是一个或一系列的查询,作为一个单元的一组有序的数据库操作。如果组中的所有SQL语句都操作成功,则认为事务成功,事务则被提交。如果在事务的组中只有一个环节操作失败,事务也不成功,则整个事务将被回滚,该事务中所有操作都被取消。事务在开发中也经常用到,因为很多业务过程都包括多个步骤,如果任何一个步骤失败,则所有步骤都不应发生。
值得注意的是,如果要用到事务处理功能,你的MySQL应该使用InnoDB引擎或者其他支持事务的引擎,切不可以使用MyISAM引擎。
来看PDO事务处理实例:
上述代码中首先是启动一个事务,然后依次执行三条sql,然后提交事务。细心的同学可能会发现,在第2条sql中查询条件sid=2有误,因为我们在前面创建mycomments表的时候没有sid这个字段,所以在执行到第2条sql时就会出错,这个时候会抛出异常,使用try{}cache(){}语句即可捕获异常,于是就执行了回滚事务rollBack(),而并没有提交事务。换句话说就是上面的代码虽然第一条sql执行完了,但是最终执行不成功,数据库没有任何写入和更新。
之前写了篇文章介绍php操作mysql有网友给小编留言说现在都流行的是mysqli链接数据库。小编今天介绍一下php操作mysqli的常见语法。
和mysql有比较多类似的地方。我们先看看mysqli怎么连接数据库。
我们先定义几个常量,数据库账户,数据库密码,还有要连接的数据库。
php怎么操作mysqli然后运行一下代码,查看是否得到需要的数据
mysqli查询结果这里我们可以看到基本操作很简单。类似mysql实例化$mysqli=new Mysqli(HOST,USER,PWD,DB);就可以了
我们看看常见的语法
mysqli_result类我们可以都试试看得出什么数据,方便在自己项目中运用到
$row=$result->fetch_row();
//$row=$result->fetch_array();
//$row=$result->fetch_assoc();
//$row=$result->fetch_object();
//释放结果集
$result->free();
//$result->free_result();
//$result->close();
//关闭连接
$mysqli->close();
然后释放资源,关闭连接。是不是也没那么难呢
一、打开关闭文件
1、fopen()函数打开文件,它有两个参数第一个是文件名,第二个是打开方式。
// 获取文件路径 $filePath = "psg.txt"; // 打开文件,将资源绑定到一个流或者句柄,绑定之后,脚本就可以通过句柄与此资源交互。 $fileHandle = fopen($filePath, "a+");
fopen()函数第二个参数可能的值
mode
说明
r只读方式打开,文件从头开始读。
r+读写方式打开,文件从头开始读写。
w只写方式打开文件,从文件开头开始写。如果文件已经存在,将文件指针指向文件头并将文件大小截为零,即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。
w+读写方式打开文件,如果文件已经存在,将文件指针指向文件头并将文件大小截为零。即删除所有文件已有的内容,如果文件不存在,函数将创建这个文件。
a写入方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加,如果该文件不存在,函数将创建这个文件。
a+读写方式打开,将文件指针指向文件末尾。如果该文件已有内容,将从文件末尾开始追加或者读,如果该文件不存在,函数将创建这个文件。
作者:XZ阳光小熊链接:https://www.jianshu.com/p/e845ab9e85c6來源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。