第一次連接引用數(shù)據(jù)庫接觸php

上個星期我們小組完成了一個連接數(shù)據(jù)庫的小頁面,并且添加了增刪改的功能。

第一個是要連庫。下面是我連庫的代碼,其中我的數(shù)據(jù)庫名為“test”。使用了PDO 連庫方式。

index.php

<?php

? ? ? ? $host='localhost';

? ? ? ? $userName='root';

? ? ? ? $password='';

? ? ? ? $conn = new PDO("mysql:host=$host;dbname=test", $userName, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));

? ? ? ? echo " ";

? ? ? ? if ($conn->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {

? ? ? ? $stmt = $conn->prepare('select * from cjtest',array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

? ? ? ? } else {

? ? ? ? ? die("error");

? ? ? ? }

?>?

連庫方式應該還有一種比較簡單的方式,就是用mysqli自己的連接。

<?php

$servername = "localhost";

$username = "username";

$password = "password";

// 創(chuàng)建連接$conn = new mysqli($servername, $username, $password);

// 檢測連接if ($conn->connect_error) {? ? die("連接失敗: " . $conn->connect_error);} echo "連接成功";

?>

而PDO與之不同的地方是創(chuàng)建連接一步不同。MySQLi是$conn= new mysqli($servername,$username,$password);

而PDO則是?$conn = new PDO("mysql:host=$host;dbname=test", $userName, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));

PDO和MySQLi的另一個區(qū)別是PDO可以還連接別的數(shù)據(jù)庫,不僅可以連接mysql,而mysqli雖然只能連接mysql但是它看起來更方便,而且在連接mysql的時候看起來很簡單。。。

index.php

第二部分是將連接成功的表在頁面上顯示出來

<?php

foreach($conn->query('select * from cjtest') as $row => $key){

? ? ? ? ? ? if($row%2 == 0){

echo .$key['id']."".$key['name']."".$key['math']."".$key['english']"

}else{

echo .$key['id']."".$key['name']."".$key['math']."".$key['english']."

? ? ? ? ? ? }? ?

? ? ? }

?>在中間用html的table把它放進去就可以在頁面上以表格的形式出現(xiàn)了。

第三個部分是我們添加增刪改的功能。

首先我是先嘗試了添加修改,先是在我以上的代碼中添加了一個刪除的按鈕(寫在了循環(huán)中),之后在點擊按鈕之后會跳轉到我刪除的php中進行連庫刪除,之后再跳轉回我的原頁面。所以我跳轉的php中寫了連庫—>刪除xx行—>跳轉回主頁面(index.php)并且跳出“刪除成功”提示框。

其中我把主鍵放在學號(id)上,所以如果我要刪除xx行,就需要刪除php(delete.php)從index.php中獲取到id行之后連庫進行刪除。

delete.php

<?php

????????$host='localhost';

? ? ? ? $userName='root';

? ? ? ? $password='';

? ? ? ? $key=$_GET["id"];//獲取點擊的id行

? ? ? ? $conn = new PDO("mysql:host=$host;dbname=test", $userName,? ? ? ? ? ? $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));//PDO連庫

? ? ? ? $sql = "delete from cjtest where id={$key}";//mysql語句

? ? ? ? $result=$conn->exec($sql);//向mysql數(shù)據(jù)庫輸出執(zhí)行命令語句

? ??????exec和query都是執(zhí)行語句。但有所不同:

? ??????PDO::exec() 不會從一條 SELECT 語句中返回結果。對于在程序中只需要發(fā)出一次的 SELECT 語句,可以考慮使用 PDO::query()。

if($result){

? ? ? ? ? ? header("location:index.php");? ? ? ? ? ?這句和下句被劃掉的原因是:header的使用會導致它下面的語句不被執(zhí)行,所以無論刪除成功與否都會跳轉。因此我們放棄了用header而是轉用location.href。

? ? ? ?? ? ?echo " alert('刪除成功!'); ";

????????????$url = "zwj_index.php" ;

? ? ? ? ? ? echo "<script> window.location.href ='$url';alert('刪除成功');</script>";?

? ? ? ? ? ? else{

? ? ? ? ? ? echo"錯誤";

}//其中的script是我在delete.php頁面上寫的一個javascript,alert()是提示框中的內容。

至此,刪除功能也就實現(xiàn)了。

之后是增加了修改的功能:

和刪除差不太多的是在刪除的旁邊添加了修改的按鈕,之后也是跳轉,但這次是跳轉到輸入頁面,之后再跳轉到修改數(shù)據(jù)庫的頁面(共2個)。最后跳轉回index.php并跳出修改成功。

不過首先還是要連庫。但是這次使用的sql語句并不是增刪查改,而是取值:getAttribute。

? ? ? ?<?php

? ? ? ? $host='localhost';

? ? ? ? $userName='root';

? ? ? ? $password='';

? ? ? ? $key=$_GET["id"];//獲取點擊的id行

????????$conn = new PDO("mysql:host=$host;dbname=test", $userName,? ? ? ? ? ? ????????$password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8"));

????????echo " ";

? ? ? ? if ($conn->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql')

? ??????//PDO::getAttribute — 取回一個數(shù)據(jù)庫連接的屬性?

????????{

? ? ? ? $stmt = $conn->prepare('select * from ????????cjtest',array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

? ? ? ? } else {

? ? ? ? ? die("error");

? ? ? ? }

????????foreach($conn->query('select * from cjtest') as $row => $key)

以上是本次的連庫以及取回屬性。之后下面寫了表單(form)并在表單里添加輸入框,分別輸入了要修改的id,name,math,english。進行提交之后會跳轉到修改數(shù)據(jù)庫的php,其中,form表單只有結合submit才可以提交,所以不能用超鏈接什么的。。。一定要用表單提交。

之后要獲取從上一部傳來的所輸入的id

????????$id_new=$_POST["id"];

? ? ? ? $name = $_POST["name"];

? ? ? ? $math = $_POST["math"];

? ? ? ? $english = $_POST["english"];

之后則是跳轉到修改的php,進行和上面一樣的連庫之后再寫sql語句


$sql = "UPDATE cjtest SET name='$name',english='$english',math='$math' WHERE id='$id_new'";

其中我們可以發(fā)現(xiàn),我之前再delete中獲取id的時候用的是GET,而再update中我卻用了POST。這是為什么呢?因為POST和GET有一些地方不太一樣。

?$_POST 變量用于收集來自 method="post" 的表單中的值。

從帶有 POST 方法的表單發(fā)送的信息,對任何人都是不可見的(不會顯示在瀏覽器的地址欄),并且對發(fā)送信息的量也沒有限制。

?$_GET 變量用于收集來自 method="get" 的表單中的值。

從帶有 GET 方法的表單發(fā)送的信息,對任何人都是可見的(會顯示在瀏覽器的地址欄),并且對發(fā)送信息的量也有限制。

GET?- 從指定的資源請求數(shù)據(jù)。

GET 請求可被緩存

GET 請求保留在瀏覽器歷史記錄中

GET 請求可被收藏為書簽

GET 請求不應在處理敏感數(shù)據(jù)時使用

GET 請求有長度限制

GET 請求只應當用于取回數(shù)據(jù)

POST?- 向指定的資源提交要被處理的數(shù)據(jù)。

POST 請求不會被緩存

POST 請求不會保留在瀏覽器歷史記錄中

POST 不能被收藏為書簽

POST 請求對數(shù)據(jù)長度沒有要求

因此我使用了POST而不是GET

之后的代碼和刪除的提示框還有跳轉一樣,都是跳轉回index.php只是alert()內的內容不同。

最后是增加了添加功能,再表格中添加了一個+按鈕,點開后會跳轉到一個和update輸入差不多的頁面中,也與update輸入差不多的寫法。只是跳轉的地址不再是update.php而是inner.php

inner.php

前面正常和上述一樣連庫,從上一個跳轉界面獲取輸入的id,name,math,english,但是sql語句不同:

$sql = "INSERT INTO cjtest(id,name,math,english) VALUES ('".$id."','".$name."','".$math."','".$english."')";

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

if($result){ $url = "index.php" ;

? ? ? ? ? ? echo "<script>window.location.href = '$url';alert(添加成功);</script>";?

? ? ? ? ? ? else{

? ? ? ? ? ? echo"錯誤";

至此,這個第一次用php連接引用的數(shù)據(jù)庫的頁面就做好了。


其中有一些新學到的還有需要注意的東西:

1、連庫方式。

2、foeach數(shù)組循環(huán)(每進行一次循環(huán),當前數(shù)組元素的值就會被賦值給 $value 變量(數(shù)組? ??????指針會逐一地移動),在進行下一次循環(huán)時,您將看到數(shù)組中的下一個值。

3、exec() ,query()的區(qū)別。

4、header的使用。

5、form的提交問題。

6、GET和POST的區(qū)別。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容