在PHP开发的时候,操作多维数组,比如我们查询数据库返回的数据数组,有些时候我们希望可以像数据库指定返回某一列那样获取数组中某一列的值,有些时候我们希望根据每一行中id的值获取到对应的数据行而不是根据key,但我们不想再去数据库查一遍,能不能直接在数组中像查询数据库一样查询数据,本文教大家如何实现这个效果。
开发工具/浏览器
PHP开发环境(本文使用的是WAMP)
代码编辑器(本文用的是PHPstorm)
谷歌浏览器
步骤/流程
1.首先我们需要创建一个同结构的多维数组用于测试,代码及浏览器运行效果如图
2.要实现我们的效果我们要用到PHP的array_column() 函数,该函数具体说明如图所示
3.使用array_column() 函数,指定第二个参数column_key的值,可以像数据库指定返回列那样返回指定键值的列,代码及浏览器运行效果如图
4.使用array_column() 函数,同时指定第二个参数column_key(指定列1)的值和第三个参数index_key(指定列2)的值, 我们可以按指定格式 [指定列2 => 指定列1] 取出数据,比如 ['id'=>'name'] 格式,代码及浏览器运行效果如图
5.使用array_column() 函数,设置第二个参数column_key的值为null, 设置第三个参数index_key为指定列,我们在数组中可以按指定列返回整行的数据,比如我们可以按ID返回整行的数据,代码及浏览器运行效果如图
6.总结
1).当我们想按数据库查询数据的方式查询数组时
2).使用array_column() 函数,指定第二个参数column_key的值,可以像数据库指定返回列那样返回指定键值的列
3).使用array_column() 函数,同时指定第二个参数column_key(指定列1)的值和第三个参数index_key(指定列2)的值, 我们可以按指定格式 [指定列2 => 指定列1] 取出数据
4).使用array_column() 函数,设置第二个参数column_key的值为null, 设置第三个参数index_key为指定列,我们在数组中可以按指定列返回整行的数据
注意事项
PHP有很多实用的函数是大家以前忽略掉的,本系列的文章会为大家详细介绍所有PHP函数
希望本系列的文章能够给大家带来帮助节省大家解决问题的时间
使用查询构造器进行查询,起码需要掌握查询类的几个关键的方法。这些方法对SQL稍微了解一点的用户理解起来应该不难,find和select方法的区别在于find方法只是查询一条记录(即使满足条件的记录有很多),并且返回的是一个一维数组(没有结果返回Null),而select方法返回的是一个二维数组(没有结果返回空数组),除此之外,他们的查询语法都是相同的。这些常用方法其实包含两种大的类别,一个是辅助方法(辅助查询用的,也称为链式方法,例如table、field、where、order和limit等方法),一个是真正的查询方法(find、select、insert、update和delete方法),查询方法是必须的,而辅助方法是可选的,并且辅助方法必须在查询方法之前被调用,并且在查询调用之后自动失效。使用查询构造器进行查询,能够最大程度的避免写针对特定数据库的查询语句,减少跨数据库类型的迁移成本。下面我们对数据库的CURD操作给出基本的用法。创建操作指往数据表添加新的记录,下面是示例代码:
insertAll方法的数据集中的元素请确保字段列表一致,否则会出错。由于insert和insertAll方法最终都是调用连接类的execute方法,我们已经知道execute方法的返回值是影响的记录数,所以insert和insertAll方法的返回值也是影响(新增)的记录数,并不会返回主键值。主键id如果是自增类型,可以使用:
// 插入单个记录Db::table('data')->insert(['name' => 'kancloud']);
如果需要获取自增id的值,可以在insert方法之后紧接着调用getLastInsID方法:
// 插入单个记录Db::table('data')->insert(['name' => 'kancloud']);// 获取上次写入的自增Id$id = Db::getLastInsID();
由于PDO内部的原因,insertAll方法后调用getLastInsID方法返回的自增Id可能存在偏差。或者直接合并上面的代码为:
// 插入单个记录 并返回自增Id$id = Db::table('data')->insertGetId(['name' => 'kancloud']);对于不在数据表中的字段写入,系统默认会抛出异常,但可以配合strict(false)方法忽略错误继续执行,下面的test数据会被忽略(data表不存在test字段)。
// 插入单个记录 并返回自增Id$id = Db::table('data')->strict(false) ->insertGetId([ 'name' => 'kancloud', 'email' => 'kancloud@qq.com', 'test' => '这个数据不会被写入', ]);
你并不需要考虑写入数据失败的情况,数据库操作过程有任何的错误都会抛出异常,你需要做的只是修正BUG或者捕获异常自行处理。
前几期的内容咱们介绍过了怎么使用phpmyadmin连接到mysql数据库服务器,还介绍了怎么使用PDO对象 连接MYsql。今天咱们接着上两期的内容去讲,如果对于怎么使用php链接数据库内容不明白的朋友,建议翻前几期的内容。使用了php链接上mysql数据库是仅仅是不够的,我们还要通过php对数据库进行常规的操作(增、删、改、查),我们对mysql数据库是通过pdo对象(还有其他方法本文主要介绍通过PDO操作)操作实现的。
怎么通过php发送mysql查询?
php中的PDO对象为我们exec方法来实现mysql数据库查询,exec语法:$pdo->exec(query),其中query是一个字符串,它可以包含任何的sql查询,需要注意的是在执行查询的时候也会遇到问题,这时候会抛出一个PDOException供你捕捉,代码示例如下:
try{
$sql = 'CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY; testtext TEXT; testdate DATE NOT NULL; ) DEFAULT CHARACTER SET utf-8 ENGINE=InnoDB';$pdo->exec($sql);}catch(PDOException $e){ echo "数据库操作失败: ".$e->getMessage(); exit;}我们使用了try-catch语句来处理查询出现的异常和错误,代码示例中我们使用了getMessage方法,它可以从MYsql数据库服务器获取详细的错误信息。
数据库对于数据库删除(delete)、插入(insert)、Update查询(修改存储数据库的数据),exec方法会返回所影响的表中的行(条目)。exec方法与select查询处理有些不同,他们可以获取更多的数据,php提供了很多方法来获取这些信息。
关于“php和mysql查询”先聊到这。每天学习一个知识点,每天进步一点点。每日寄语”永不言败,是成功者的最佳品格。”转载请标注出处,近期发现有个人未经允许擅自转载,本人声明请尽快删除。
我们都知道现在的框架都是需要使用数据库来存储内容的,要么使用mysql,要么使用sqllite,要么使用sqlserver,当然也可以使用MongoDB等,总之要保存数据,就需要使用数据库来进行。那么是否存在一种不需要数据库,也能搭建一个博客的系统呢?答案是肯定的,它就是今天要介绍的不需要数据库的内容管理系统-reloadcms。
这是一个开源的基于PHP的cms系统,它不需要提供数据库,就可以直接使用。当然目前它已经不再维护了,但是笔者还是找到了它的源码,在本地进行了搭建,它是一个基于flat files系统的管理系统,对于初学php的人来说还是有一定的借鉴意义的。
下面是它的页面截图。
作为一个内容管理系统,它可以发布文章,编辑文章,当然像添加分类,这些它都是支持的,此外他还有模板系统,还有自己的皮肤系统,你可以自定义博客样式,可以说麻雀虽小五脏俱全。
用一句话来概括reloadcms就是它是功能非常强大的内容管理系统,它具有模块化,模板,用户管理,高级权限系统,它还包含在主要模块中的文章,新闻,书签, 聊天和文件归档等等。
可以说抛开数据库不谈的话,这个内容管理系统几乎可以和目前的许多内容管理系统相抗衡。当然,没有数据库的管理系统最终还是难登上大雅之堂的。但是我认为它还是有很多值得我们学习的。比如在没有数据库的年代,我们是如何存储数据的,flat files是怎样的一种文件管理系统,它的文档是如何组织的,我想这些对于我们研究数据库都是很有启发和借鉴意义的。
现在有一种思想叫做读“无用”之书,我想这个系统就属于“无用”系统,我们有时间的时候真的可以多看看这些无用的东西,因为有的时候,它真的能开拓我们的眼界,会给我们打开一扇窗,从那扇窗,我们会看到一个我们不曾了解的世界。
解析结果集
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 ();}?>
人人都是程序员,希望在零碎的阅读时间里,给您一些技术提升。
1 准备工作
下载thinkphp框架,并搭建一个php项目,可参考之前写的其他文章。已部署好的php项目如下图。
2 配置数据库连接
在项目application目录下,找到database.php文件,输入数据库类型,服务器地址数据库名称,数据库用户名,密码,端口号。如下图。
3 获取数据库数据
在application-index-controller下面,创建一个User.php文件,定义命名控制器的命名空间,并编写一个获取用户的方法。接口方法如下图。完成后,在浏览器输入localhost/thinkphpdemo/public/index.php/index/User/getuser,查到用户表相关数据,说明从数据获取数据成功。
4 同时访问两个数据库数据
之前已经创建了一个数据库thinkphpdemo,再创建一个数据库thinkphpdemodbs,并创建一张t_classroom表,录入测试数据。
在刚才的user控制器,新建一个getUserAndClassroom的方法。先用常规方法,获取thinkphpdemo数据的user信息,在重新定义一个数据库连接,(注意,本次连接的是本地服务器的两个不同数据。连接thinkphpdemodbs,如果要连接不同服务器的数据,将127.0.0.1改成其他服务器的ip即可),并查询classroom数据,合并成一个数组。通过localhost/thinkphpdemo/public/index.php/index/User/getUserAndClassroom,获取到如下数据,说明两个数据请求成功。
短短几行代码,就实现了不同数据的数据访问,非常便捷,如果您想了解其他方面的内容,欢迎留言。
5 结束语
php是世界上最好的语言,谢谢阅读,欢迎关注。
1.什么是msSQL呢?
msSQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。SQL Server一开始并不是微软自己研发的产品,而是当时为了要和IBM竞争时,与Sybase合作所产生的,其最早的发展者是Sybase,同时微软也和Sybase合作过 SQL Server 4.2版本的研发,微软亦将SQL Server 4.2移植到Windows NT(当时为3.1版),在与Sybase终止合作关系后,自力开发出SQL Server 6.0版,往后的SQL Server即均由微软自行研发。
了解完mssql数据库之后,我们经常见到的是PHP+mysql数据库的组合,这个黄金搭档是公认的最佳组合,我们今天不说它了,今天来说说PHP+mssql吧,作为程序猿来讲,经常被各种需求轰炸,什么需求都有,今天正好在做小型项目时发现PHP需要与mssql数据库连接,第一感觉就是与mysql连接差不多,然后就下手开始了,但在我们的运行环境里面,很少有人去安装一些模块来支撑这个连接。下面我们一起来看看怎么连接的吧。
第一步:下载SQL Server驱动
首先来看看我们的sqlderver扩展是32位还是64位的,不是根据电脑的系统的位数判断的,而是根据php的位数判断的。如下图的红框所示查看,我们是64位的。
phpinfo()图片上面这图怎么查看,可通过下面代码
<?php
echo phpinfo();
?>
我这里用的php是PHP Version 7.3.4,要下载对应的扩展版本。
官方下载地下:https://docs.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-2017
1.下载完毕解压出来把php_pdo_sqlsrv_73_nts_x64.dll和
php_sqlsrv_73_nts_x64.dll
放到D:\phpstudy_pro\Extensions\php\php7.3.4nts\ext(放在你安装PHP的ext目录下面)
2.设置php.ini,把这二个dll模块加进来。
extension=php_sqlsrv_73_nts_x64.dll
extension=php_pdo_sqlsrv_73_nts_x64.dll
如下图:
注意:PHP Version 7.3.4对应的版本是php_sqlsrv_73_nts_x64.dll和php_pdo_sqlsrv_73_nts_x64.dll
第二步:安装ODBC驱动11
驱动11支持所有版本,所以果断下载11版本:官方下载地下:https://www.microsoft.com/en-us/download/details.aspx?id=36434
下载成功直接安装就可以
注意:此时要重新启动apache.
第三步:写代码测试是否能成功
<?php
$server = "localhost"; //服务器名称
$uid = "xxx"; //数据库用户名
$pwd = "123456"; //数据库密码
$db = "test"; // 数据库名
$connectionInfo=array("UID"=>$uid,"PWD"=>$pwd,"Database"=>$db);
$conn =sqlsrv_connect($server,$connectionInfo);
if( $conn == false) {
echo "连接失败!";
die( var_dump( sqlsrv_errors(), true));
}else{
echo "成功连接";
}
如果显示“成功连接”,说明已经连接成功了,快去庆祝一下吧
连接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()「程序员培养之路第四十五天」
面向对象的编程-多态「程序员培养之路第四十四天」
数据库是编程的核心内容,在使用php做网站的过程中,固然要与数据库打交道,那么在php中,怎样来创建一个数据库呢?下面我们就一起来了解一下吧。
1、创建一个函数
我在这里是作为演示实例,所以没有用框架,用的是原生的,打开编辑器,新建一个文件,然后再文件里面,先新建一个函数,这里命名是create_data,接下来我们将在这个函数里面来写php怎样创建一个数据库?
2、登陆信息
要想创建数据库或者是对数据库的其他操作,都必须先连接数据库,先设置好用户名,主机名,密码这三个变量:
$Username="root";
$Password="";
$servernmae="localhost";
3、连接数据库
登陆信息创建好之后,我们就来连接数据库了,我这里使用的是mysqli的连接方式:
$connect=new mysqli($servernmae,$Username,$Password);
4、创建数据库
如果数据库连接成功的话,我们就开始创建数据库,创建数据库的sql语句格式是“create database +要创建的数据库名”,例子如下:
$sql="create database ceshi";
然后是执行这个sql语句:
if($connect->query($sql)){
echo "successful!";
}
else{
echo $connect->error;
}
5、访问测试。
开启本地的服务器和mysql服务器,然后在浏览器中输入刚才那个文件的地址进行访问,结果如下:
完整代码如下:
function create_data(){
$Username="root";
$Password="";
$servernmae="localhost";
$connect=new mysqli($servernmae,$Username,$Password);
if($connect){
$sql="create database ceshi";
if($connect->query($sql)){
echo "successful!";
}
else{
echo $connect->error;
}
}
}
create_data();
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视频教程,欢迎参考学习!