PHP-連接數據庫

1.2 連接數據庫

在這里插入圖片描述

通過PHP做MySQL的客戶端

1.2.1 開啟mysqli擴展

在php.ini中開啟mysqli擴展

extension=php_mysqli.dll
  • 開啟擴展后重啟服務器,就可以使用mysqli_函數了,

在這里插入圖片描述

1.2.2 連接數據庫

創建news數據庫

-- 創建表
drop table if exists news;
create table news(id int unsigned auto_increment primary key comment '主鍵',title varchar(20) not null comment '標題',content text not null comment '內容',createtime int not null comment '添加時間'
)engine=innodb charset=utf8 comment '新聞表';-- 插入測試數據
insert into news values (null,'鋤禾','鋤禾日當午',unix_timestamp());
insert into news values (null,'草','離離原上草',unix_timestamp());

思考:時間字段可以用datetime類型,也可以使用int類型。一般用int,因為datetime占用8個字節,int占用4個字節。

連接數據庫

mysqli_connect(主機IP,用戶名,密碼,數據庫名,端口號) //如果端口號是3306可以省略
mysqli_connect_error():獲取連接數據庫的錯誤信息
mysqli_connect_errno():獲取連接數據庫的錯誤編碼
mysqli_set_charset(連接對象,字符編碼)    

代碼如下:

<?php
//連接數據庫,連接成功返回連接對象
$link=@mysqli_connect('localhost','root','root','data','3306');
//var_dump($link);			//object(mysqli)
if(mysqli_connect_error()){echo '錯誤號:'.mysqli_connect_errno(),'<br>';	//顯示錯誤編碼echo '錯誤信息:'.mysqli_connect_error();		//顯示錯誤信息exit;
}
//設置字符編碼
mysqli_set_charset($link,'utf8');	

腳下留心:與數據庫相關用utf8,與頁面顯示相關用utf-8

1.3 操作數據

1.3.1 數據操作語句

通過mysqli_query()執行SQL語句

增、刪、改語句執行成功返回true,失敗返回false

<?php
//1、連接數據庫
$link=mysqli_connect('localhost','root','root','data');
//2、設置支付編碼
mysqli_set_charset($link,'utf8');
//3、執行SQL語句//3.1  執行insert語句
/*
$rs=mysqli_query($link,"insert into news values (null,'靜夜思','床前明月光',unix_timestamp())");
if($rs)echo '自動增長的編號是:'.mysqli_insert_id($link);
*///3.2  執行update語句
/*
$rs=mysqli_query($link,"update news set content='疑是地上霜' where id=4");
if($rs)echo '受影響的記錄數是:'.mysqli_affected_rows($link);
else{echo '錯誤碼:'.mysqli_errno($link),'<br>';echo '錯誤信息:'.mysqli_error($link);	
}
*///3.3  執行delete語句
mysqli_query($link,"delete from news where id=5");

用到的函數

mysqli_query():執行SQL語句
mysqli_insert_id():獲取插入記錄自動增長的ID
mysqli_affected_rows():獲取受影響的記錄數
mysqli_error():獲取執行SQL語句的錯誤信息
mysqli_errno():獲取執行SQL語句的錯誤碼

1.3.2 數據查詢語句

數據查詢用select、desc、show,成功會返回結果集,失敗返回false

<?php
//1、連接數據庫
$link=@mysqli_connect('localhost','root','root','data') or die('錯誤信息:'.mysqli_connect_error());
//2、設置字符編碼
mysqli_query($link,'set names utf8');
//3、執行查詢語句
$rs=mysqli_query($link,'select * from news');
//var_dump($rs);	//object(mysqli_result)
//4、獲取對象中的數據
//4.1  將對象中的一條數據匹配成索引數組,指針下移一條
//$rows=mysqli_fetch_row($rs);//4.2  將對象中的一條數據匹配成關聯數組,指針下移一條
//$rows=mysqli_fetch_assoc($rs);//4.3  將對象中的一條數據匹配成索引,關聯數組,指針下移一條
//$rows=mysqli_fetch_array($rs);//4.4  總列數、總行數
//echo '總行數'.mysqli_num_rows($rs),'<br>';
//echo '總列數'.mysqli_num_fields($rs),'<br>';//4.5  獲取所有數據
//$list=mysqli_fetch_all($rs);		//默認是索引數組
//$list=mysqli_fetch_all($rs,MYSQLI_NUM);		//匹配成索引數組
//$list=mysqli_fetch_all($rs,MYSQLI_ASSOC);		//匹配成關聯數組
$list=mysqli_fetch_all($rs,MYSQLI_BOTH);		//匹配成關聯、索引數組echo '<pre>';
print_r($list);//5、銷毀結果集
mysqli_free_result($rs);//6、關閉連接
mysqli_close($link);

使用的函數

mysqli_fetch_assoc():將一條數組匹配關聯數組
mysqli_fetch_row():將一條記錄匹配成索引數組
mysqli_fetch_array():將一條記錄匹配成既有關聯數組又有索引數組
mysqli_fetch_all():匹配所有記錄
mysqli_num_rows():總行數
mysqli_num_fields():總記錄數
mysqli_free_result():銷毀結果集
mysqli_close():關閉連接

1.4 新聞模塊實戰

1.4.1 包含文件

由于所有的操作都要連接數據庫,將連接數據庫的代碼存放到包含文件中

步驟

1、在站點下創建inc文件夾

2、在inc下創建conn.php文件,用來連接數據庫,代碼就是上面連接數據庫的代碼

代碼實現

<?php
//連接數據庫
$link=@mysqli_connect('localhost','root','root','data') or die('錯誤:'.mysqli_connect_error());
mysqli_set_charset($link,'utf8');

1.4.2 顯示新聞

步驟:

1、連接數據庫

2、獲取數據

3、遍歷循環數據

代碼

<style type="text/css">table{width:780px;border:solid 1px #000;margin:auto;}th,td{border:solid 1px #000;}
</style>
<body>
<?php
//1、連接數據庫
require './inc/conn.php';
//2、獲取數據
$rs=mysqli_query($link,'select * from news order by id desc');	//返回結果集對象
$list=mysqli_fetch_all($rs,MYSQLI_ASSOC);		//將結果匹配成關聯數組
?>
<table><tr><th>編號</th> <th>標題</th> <th>內容</th> <th>時間</th> <th>修改</th> <th>刪除</th><!--3、循環顯示數據--><?php foreach($list as $rows):?><tr><td><?php echo $rows['id']?></td><td><?php echo $rows['title']?></td><td><?php echo $rows['content']?></td><td><?php echo date('Y-m-d H:i:s',$rows['createtime'])?></td><td><input type="button" value="修改" οnclick=""></td><td><input type="button" value="刪除" οnclick=""></td></tr><?php endforeach;?></tr>
</table>
</body>

運行結果

在這里插入圖片描述

1.4.3 添加新聞

步驟:

1、創建表單

2、連接數據庫

3、將新聞數據寫入到數據庫中

入口(list.php)

<a href="./add.php">添加新聞</a>

代碼實現

<body>
<?php
if(!empty($_POST)) {//2、連接數據庫require './inc/conn.php';//3、插入數據$time=time();	//獲取時間戳$sql="insert into news values (null,'{$_POST['title']}','{$_POST['content']}',$time)";  //拼接SQL語句if(mysqli_query($link,$sql))	//執行SQL語句header('location:./list.php');	//插入成功就跳轉到list.php頁面else{echo 'SQL語句插入失敗<br>';echo '錯誤碼:'.mysqli_errno($link),'<br>';echo '錯誤信息:'.mysqli_error($link);}
}
?>
<!--1、創建表單-->
<form method="post" action="">標題: <input type="text" name="title"> <br /> <br />內容:  <textarea name="content" rows="5" cols="30"></textarea> <br /> <br /><input type="submit" name="button" value="提交">
</form>
</body>

運行結果

在這里插入圖片描述

1.4.4 刪除新聞

步驟:

1、在list.php頁面點擊刪除按鈕,跳轉到del.php頁面,傳遞刪除的id

2、在del.php頁面連接數據庫

3、通過id刪除數據

4、刪除成功后,跳轉到list.php

入口(list.php)

<input type="button" value="刪除" οnclick="if(confirm('確定要刪除嗎'))location.href='./del.php?id=<?php echo $rows['id']?>'">
  • 1

del.php

<?php
//1、連接數據庫
require './inc/conn.php';
//2、拼接SQL語句
$sql="delete from news where id={$_GET['id']}";
//3、執行SQL語句
if(mysqli_query($link,$sql))header('location:./list.php');
else{echo '刪除失敗';
}

小結:

1、一個頁面是否寫HTML架構,取決于是否有顯示功能。

2、如果一個頁面只是做業務邏輯,沒有顯示功能,就不需要寫HTML架構,比如del.php頁面

在這里插入圖片描述

1.4.5 修改新聞

入口(list.php)

<input type="button" value="修改" οnclick="location.href='edit.php?id=<?php echo $rows['id']?>'">
  • edit.php頁面

步驟

第一步:顯示修改界面

? 1、連接數據庫

? 2、獲取修改的數據

? 3、將數據顯示到表單中

第二步:執行修改邏輯

? 1、獲取新數據

? 2、拼接修改的SQL語句,執行修改邏輯

代碼如下

<?php
//連接數據庫
require './inc/conn.php';
//1、獲取修改的數據庫
$sql="select * from news where id={$_GET['id']}";	//拼接SQL語句
$rs=mysqli_query($link,$sql);	//獲取修改的數據
$rows=mysqli_fetch_assoc($rs);	//將修改的數據匹配成一維關聯數組
//2、執行修改的邏輯
if(!empty($_POST)) {$id=$_GET['id'];		//獲取修改的id$title=$_POST['title'];	//修改的標題$content=$_POST['content'];	//修改的內容$sql="update news set title='$title',content='$content' where id=$id"; //拼接SQL語句if(mysqli_query($link,$sql))header('location:list.php');   //修改成功跳轉到list.php頁面elseecho '錯誤:'.mysqli_error($link);exit;
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
</head><body>
<form method="post" action="">標題: <input type="text" name="title" value='<?php echo $rows['title']?>'> <br /> <br />內容:  <textarea name="content" rows="5" cols="30"><?php echo $rows['content']?></textarea> <br /> <br /><input type="submit" name="button" value="提交"><input type="button" value="返回" οnclick="location.href='list.php'">
</form>
</body>
</html>

運行結果

在這里插入圖片描述

?

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python模塊初始與time、datetime及random

模塊初始與time、datetime及random 模塊初始 模塊的概念&#xff08;本質為一個py文件&#xff09; python模塊可以將代碼量較大的程序分割成多個有組織的、彼此獨立但又能互相交互的代碼片段&#xff0c;這些自我包含的有組織 的代碼段就是模塊&#xff0c;模塊在物理形式上表…

PHP-面向對象編程教程

1.2 面向對象介紹 1.2.1 介紹 面向對象是一個編程思想。編程思想有面向過程和面向對象 面向過程&#xff1a;編程思路集中的是過程上 面向對象&#xff1a;編程思路集中在參與的對象 以去飯館吃飯為例&#xff1a; ? 面向過程&#xff1a;點菜——做菜——上菜——吃飯—…

vue-property-decorator使用指南

在Vue中使用TypeScript時&#xff0c;非常好用的一個庫&#xff0c;使用裝飾器來簡化書寫。 一、安裝 npm i -S vue-property-decorator PropPropSyncProvideModelWatchInjectProvideEmitComponent (provided by vue-class-component)Mixins (the helper function named mix…

Java生鮮電商平臺-統一異常處理及架構實戰

Java生鮮電商平臺-統一異常處理及架構實戰 補充說明&#xff1a;本文講得比較細&#xff0c;所以篇幅較長。 請認真讀完&#xff0c;希望讀完后能對統一異常處理有一個清晰的認識。 背景 軟件開發過程中&#xff0c;不可避免的是需要處理各種異常&#xff0c;就我自己來說&…

VScode新建自定義模板快捷方式

VS新建vue文件的自定義模板 在使用vscode開發的時候&#xff0c;新建vue文件是不可或缺的&#xff0c;但是VSCode并沒有vue文件的初始化模板&#xff0c;這個需要自定義模板。 我們可以使用vscode的snippets在新建.vue 文件后輕松獲得一套模板。 具體步驟 打開VSCode -> …

ESLint Unary operator ‘++‘ used.

ESLint Unary operator used. 安裝了ESLint&#xff0c;用這個工具之后發現居然不會寫代碼了。好尷尬~ 感覺自己以前寫的JS都是假的... 沒有操作 increment(state) {state.count ; },for(let i 0; i < temp.length; i} {//... } 然后報了如下錯誤 Unary operator u…

sencha touch筆記(6)——路由控制(1)

做項目的時候在界面的跳轉上遇到了挺大的問題&#xff0c;本來跳轉不想通過路由來控制的&#xff0c;沒辦法&#xff0c;只能再去看一下路由的跳轉方式了。 應用程序的界面發生改變后&#xff0c;可以通過路由讓應用程序的界面返回到改變之前的狀態&#xff0c;例如瀏覽器中頁面…

Angular rxjs operators 筆記

toArray /*toArray把結果都塞到數組里去 */ const source = interval(1000); const example = source.pipe(take(10),toArray() );example.subscribe(val => console.log(val)); // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] toArray /*pairwise把相鄰的兩個流組成數組 */…

Angular rxjs Subject筆記

BehaviorSubject /*ehaviorSubject接受一個默認參數,相當于new Subject后自動next(aa)之后到行為和Subject一致 */ const behave = new BehaviorSubject(aa); behave.subscribe(res => {console.log(res)

面試39 MySQL讀寫分離

&#xff08;1&#xff09;如何實現mysql的讀寫分離&#xff1f; 其實很簡單&#xff0c;就是基于主從復制架構&#xff0c;簡單來說&#xff0c;就搞一個主庫&#xff0c;掛多個從庫&#xff0c;然后我們就單單只是寫主庫&#xff0c;然后主庫會自動把數據給同步到從庫上去。 …

Angular自學筆記(一)ngModule 元數據

工作硬上開發angular項目,好難啊,上網搜資料教程真的賊少,吐槽真的沒什么人用angular,自己學習到處搜集整理的筆記,分享出來,方便查看理解總結。應該適用于angular11系列(更新真快,反正我也不知道之前低版本不同 手動狗頭) 什么是angular module(ngModule)? angula…

cookbook_數據結構和算法

1.1將數據分解為單獨的變量list_a [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i list_a print(a,b,c,d,e,f,g,h,i) #使用相等數量的參數來接收_,b,c,d,e,f,g,h,_ list_a print(b,c,d,e,f,g,h) #不要的數據使用一個沒有用的變量接收 View Code1.2從任意長度的可迭代對象中分解元素…

Angular自學筆記(二)顯示數據 綁定屬性

顯示數據 1.顯示數據 ng的模版中,默認用雙大括號{{}}綁定組件中的變量顯示出來 import {Component } from @angular/core; @Component({selector: app-root,template: `<h1>{{title}}</h1><h2>My favorite hero is: {{myHero}}</h2>`

機器學習概覽

什么是機器學習&#xff1f; 廣義概念&#xff1a; 機器學習是讓計算機具有學習的能力&#xff0c;無需明確的編程 —— 亞瑟薩繆爾&#xff0c;1959 工程概念&#xff1a; 計算機程序利用經驗 E 學習任務 T&#xff0c;性能是 P&#xff0c;如果針對任務 T 的性能 P 隨著經驗 …

Angular自學筆記(?)TemplateRef和ViewContainerRef

ElementRef 由于ng是跨平臺的為了減少視圖層和渲染層的耦合也為了讓ng更適應多平臺,ng幫我們封裝了ElementRef,我們可以通過ElementRef拿到native元素(在瀏覽器中也就是我們常說的DOM元素) 下面我們看一段代碼 import {Component, ElementRef, AfterViewInit } from @angu…

python之re模塊

re模塊 re&#xff08;正則&#xff09;簡介 ? 正則就是用一些具有特殊含義的符號組合到一起&#xff08;稱為正則表達式&#xff09;來描述字符或者字符串的方法。或者說&#xff1a;正則就是用來描述一類事物的規則。 re元字符 元字符匹配內容\w匹配字母&#xff08;包含中文…

Angular自學筆記(?)ViewChild和ViewChildren

ViewChild 最好在ngAfterViewInit之后,獲取模版上的內容 獲取普通dom import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from @angular/core;@Component({selector: app-view-child

IPropertySet接口

Members AllProperties MethodsDescriptionCountThe number of properties contained in the property set.包含屬性個數GetAllPropertiesThe name and value of all the properties in the property set.GetPropertiesThe values of the specified properties.GetPropertyThe …

Angular自學筆記(?)ContentChild和ContentChildren

ContentChild 用法類似ViewChild, 獲取投影中到組件或指令還有元素dom等 獲取投影中但組件 import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from @angular/core;@Component({selector: app-content-child-panel,templateUrl

Angular自學筆記(?)屬性型指令

基本概念 用于改變DOM元素的外觀或行為的指令 組件是一種特殊的指令 import {Component} from @angular/core; @Component({selector: app-root,template: `<!--<app-for></app-for>--><div app-for>dasfsada</div>`,