首頁  >  文章  >  php教程  >  前端學PHP之mysql擴充函數

前端學PHP之mysql擴充函數

PHP中文网
PHP中文网原創
2016-12-05 13:26:271514瀏覽

×

目錄

[1]連接資料庫[2]使用資料庫[3]執行SQL查詢[4]操作結果集[5]關閉連接


前面的話

『 、速度快、整體擁有成本低,尤其是具有開放原始碼這一特點,許多中小型網站為了減低網站總體擁有成本而選擇了mysql作為網站資料庫。而使用mysql資料庫管理系統與php腳本語言結合的資料庫系統解決方案,正被越來越多的網站所採用,其中以LAMP(linux+apche+mysql+php)模式最為流行

  PHP有標準的函數用來操作資料庫,mysqli是PHP5新加的,是對mysql擴充的改進。但由於歷史遺留問題,好多舊項目是在PHP4中使用mysql拓展開發的,如果在原有的項目上進行二次開發,都要求使用mysql拓展函數。如果是新設計的項目,建議使用mysqli拓展或PDO技術。本文主要介紹PHP中的mysql拓展函數

總括

  在PHP腳本中操作MySQL資料庫的幾個步驟如下:

  1.連接MySQL資料庫設定字元集(可選)

  3.執行SQL指令

  4.處理結果集

  5.關閉資料庫連線

步驟一:判斷是否完成資料庫伺服器,並

  mysql_connect()函數用來開啟一個到MySQL 伺服器的連線。如果成功則回傳一個資源, 或是失敗時傳回FALSE

resource mysql_connect ([ string $server [, string $username [, string 
$password [, bool $new_link [, int $client_flags ]]]]] )

mysql_errno()


int mysql_errno ([ resource $link_identifier ] )

mysql_error()


  mysql_error()函數用來傳回上一個MySQL 運算產生的文字錯誤資訊。如果沒有指定連線資源號,則使用上一個成功開啟的連線從MySQL 伺服器擷取錯誤訊息


string mysql_error ([ resource $link_identifier ] )

<?php$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;123456&#39;);
var_dump($link);//resource(3, mysql link)if(!$link){die(&#39;连接失败:&#39;.mysql_error());
}?>

步驟二:選擇資料庫,並設定字元集通常,資料庫的建立工作都是先由資料庫管理員(DBA)建立,再由PHP程式設計師在腳本中使用。例如,建立一個名為bookstore的資料庫


  使用PHP腳本建立與mysql伺服器的連線之後,為了避免每次呼叫PHP的mysql擴充函數都指定目標資料庫,最好先用mysql_select_db()函數為後續操作選定一個預設資料庫,這個函數與SQL指令"USE bookstore"功能相似


mysql_select_db()

  mysql_select_db()函數用於選擇MySQLSQL 資料庫

  mysql_select_db()函式

步驟三:執行SQL指令

  首先,在bookstore資料庫中建立一個books資料表

bool mysql_select_db ( string $database_name [, resource $ link_identifier ] )


🀜  㟀子 就會將其發送到MYSQL伺服器並執行


mysql_query()


  mysql_query()函數用於發送一條MySQL 查詢。 mysql_query() 只對SELECT,SHOW,DESCRIBE, EXPLAIN 和其他語句傳回一個resource,如果查詢出現錯誤則傳回FALSE;對於其它類型的SQL 語句,例如INSERT, UPDATE, DELETE, DROP 之類, mysql_query() 在執行成功時回傳TRUE,出錯時回傳FALSE

<?php$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;zhiaihebe0123&#39;);
var_dump($link);//resource(3, mysql link)if(!$link){die(&#39;连接失败:&#39;.mysql_error());
}mysql_select_db(&#39;bookstore&#39;,$link) or die(&#39;不能选定数据库bookstore:&#39; .mysql_error());
mysql_query(&#39;set names utf8&#39;);//设置字符集(一般不常用)?>


  將要插入的3條INSERT語句宣告為一個字串


.語句,如果成功回傳true,失敗則回傳false

CREATE TABLE books(
    id INT NOT NULL AUTO_INCREMENT,bookname VARCHAR(80) NOT NULL DEFAULT '',publisher 
    VARCHAR(60) NOT NULL DEFAULT '',author VARCHAR(20) NOT NULL DEFAULT '',price
     DOUBLE(5,2) NOT NULL DEFAULT 0.00,ptime INT NOT NULL DEFAULT 0,
     pic CHAR(24) NOT NULL DEFAULT '',detail TEXT,PRIMARY KEY(id));
));


mysql_affected_rows()


mysql_affected_rows()


mysql_affected_rows()


『執行成功則傳回受影響的行的數目,如果最近一次查詢失敗的話,函數傳回-1

resource mysql_query ( string $query [, resource $link_identifier = NULL ] )


$insert = "insert into books(bookname, publisher, author, price, detail) values
('PHP','电子工业出版社','张三','80.00','PHP相关'),
('ASP','电子工业出版社','李四','90.00','ASP相关'),
('JSP','电子工业出版社','王五','70.00','JSP相关')";
來確定資料操作是否成功

mysql_insert_id()

  mysql_insert_id()函数用来取得上一步 INSERT 操作产生的 ID


int mysql_insert_id ([ resource $link_identifier ] )



<? = "" = (( && () > 0 "数据记录插入成功,最后一条插入的数据记录id为:".()."
" "数据记录插入失败,错误号:".().",错误原因:".()."
"?>


  实际上,最后一个id应该为6,但是由于4、5、6三条语句是同时插入的,这时显示的是第一个id为4

  下面,将id为4的记录的作者修改为小白


 = ("UPDATE books SET author='小白' WHERE id='4'"( && () > 0 "数据记录修改成功
" "数据记录修改失败,错误号:".().",错误原因:".()."
"


  下面,删除作者为李四的记录


 = ("DELETE FROM books WHERE author='李四'"( && () > 0 "数据记录删除成功
" "数据记录删除失败,错误号:".().",错误原因:".()."
"


 

步骤四:处理结果集

  在PHP脚本中执行SELECT查询命令,也是调用mysql_query()函数,但和执行DML不同的是,执行SELECT命令之后,mysql_query()函数的返回值是一个PHP资源的引用指针(结果集)。这个返回值可以在各种结果集处理函数中,对结果数据表的各个字段进行处理

mysql_num_fields()

  mysql_num_fields()函数取得结果集中字段的数目


int mysql_num_fields ( resource $result )


mysql_num_rows()

  mysql_num_rows()函数取得结果集中行的数目


int mysql_num_rows ( resource $result )



$result = mysql_query("SELECT * FROM books");
$rows = mysql_num_rows($result);$cols = mysql_num_fields($result);
var_dump($rows,$cols);//int 4 int 8


  从结果中可以看出,该结果集总共有4行8列

 

  如果需要访问结果集中的数据,可以选用mysql_fetch_row()、mysql_fetch_assoc()、mysql_fetch_array()、mysql_fetch_object()这4个函数中的任意一个

mysql_fetch_row()

  mysql_fetch_row()函数从结果集中取得一行作为枚举数组


array mysql_fetch_row ( resource $result )


  如果需要访问结果集中的数据,可以选用mysql_fetch_row()、mysql_fetch_assoc()、mysql_fetch_array()、mysql_fetch_object()这4个函数中的任意一个

mysql_fetch_row()

  mysql_fetch_row()函数从结果集中取得一行作为枚举数组


array mysql_fetch_row ( resource $result )



$result = mysql_query("SELECT * FROM books");
$row = mysql_fetch_row($result);
//Array ( [0] => 1 [1] => PHP [2] 
=> 电子工业出版社 [3] => 张三 [4] => 80.00 [5] => 0 [6] => [7] => PHP相关 )
print_r($row);$row = mysql_fetch_row($result);
//Array ( [0] => 3 [1] => JSP [2] 
=> 电子工业出版社 [3] => 王五 [4] => 70.00 [5] => 0 [6] => [7] => JSP相关 )
print_r($row);


mysql_fetch_assoc()

  mysql_fetch_assoc()函数从结果集中取得一行作为关联数组


array mysql_fetch_assoc ( resource $result )



$result = mysql_query("SELECT * FROM books");
$assoc = mysql_fetch_assoc($result);
//Array ( [id] => 1 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 
张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )
print_r($assoc);
$assoc = mysql_fetch_assoc($result);
//Array ( [id] => 3 [bookname] => JSP [publisher] => 电子工业出版社 [author] => 王五 [price] => 
70.00 [ptime] => 0 [pic] => [detail] => JSP相关 )
print_r($assoc);


mysql_fetch_array()

  mysql_fetch_array()函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和 MYSQL_BOTH,默认值是 MYSQL_BOTH


array mysql_fetch_array ( resource $result [, int $ result_type ] )



$result = mysql_query("SELECT * FROM books");$array = mysql_fetch_array($result);
//Array ( [0] => 1 [id] => 1 [1] => PHP [bookname] => PHP [2] => 电子工业出版社 [publisher] => 
电子工业出版社 [3] => 张三 [author] => 张三 [4] => 80.00 [price] => 80.00 [5] => 0 
[ptime] => 0 [6] => [pic] => [7] => PHP相关 [detail] => PHP相关 )print_r($array);
$array = mysql_fetch_array($result);
// Array ( [0] => 3 [id] => 3 [1] => JSP [bookname] => JSP [2] => 电子工业出版社 [publisher] =>
 电子工业出版社 [3] => 王五 [author] => 王五 [4] => 70.00 [price] => 70.00 [5] => 0 
 [ptime] => 0 [6] => [pic] => [7] => JSP相关 [detail] => JSP相关 )print_r($array);


mysql_fetch_object()

  mysql_fetch_object()函数从结果集中取得一行作为对象


object mysql_fetch_object ( resource $result )



$result = mysql_query("SELECT * FROM books");$object = mysql_fetch_object($result);
//stdClass Object ( [id] => 1 [bookname] => PHP [publisher] => 电子工业出版社 [author] 
=> 张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )print_r($object);
$object = mysql_fetch_object($result);
//stdClass Object ( [id] => 3 [bookname] => JSP [publisher] => 电子工业出版社 [author] => 
王五 [price] => 70.00 [ptime] => 0 [pic] => [detail] => JSP相关 )
print_r($object);


  对于上面的四个函数来说,默认指针都指向第一行记录。在获取一行记录后,指针会自动下移。如果是最后一委,则函数返回false。一般地,mysql_fetch_assoc()这种返回关联数组形式的函数较常用

mysql_data_seek()

  mysql_data_seek()函数可以移动内部结果的指针

  [注意]$row_number从0开始


bool mysql_data_seek ( resource $result , int $row_number )



$result = mysql_query("SELECT * FROM books");
$assoc = mysql_fetch_assoc($result);
mysql_data_seek($result , 2);$assoc = mysql_fetch_assoc($result);
Array ( [id] => 4 [bookname] => PHP [publisher] => 电子工业出版社 [author] => 小白[price]
 =>80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )print_r($assoc);mysql_data_seek($result , 0);
$assoc = mysql_fetch_assoc($result);//Array ( [id] => 1 [bookname] => PHP [publisher] 
=> 电子工业出版社 [author] => 张三 [price] => 80.00 [ptime] => 0 [pic] => [detail] => PHP相关 )
print_r($assoc);


  下面使用while循环和mysql_fetch_assoc()函数将结果集以表格的形式显示出来


table{
    border:1px solid black;
    border-collapse:collapse;
    table-layout:fixed;
}" _ue_custom_node_="true">$result = mysql_query("SELECT id,bookname,publisher,author,price FROM books");
echo '';echo '';echo '编号';echo '书名';echo '出版社';echo '作者';echo '价格';echo '';
while($assoc = mysql_fetch_assoc($result)) {echo '';
echo "{$assoc['id']}";echo "{$assoc['bookname']}";
echo "{$assoc['publisher']}";echo "{$assoc['author']}";
echo "{$assoc['price']}";echo '';
}echo '';


mysql_free_result()

  mysql_free_result()函数用于释放结果内存


bool mysql_free_result ( resource $result )


  mysql_free_result() 仅需要在考虑到返回很大的结果集时会占用多少内存时调用。在脚本结束后所有关联的内存都会被自动释放

 

步骤五:关闭数据库连接

mysql_close()

  mysql_close()函数用于关闭 MySQL 连接


bool mysql_close ([ resource $link_identifier = NULL ] )


  mysql_close() 关闭指定的连接标识所关联的到 MySQL 服务器的非持久连接。如果没有指定 link_identifier,则关闭上一个打开的连接

  所以,一个比较完整的php操作数据库扩展函数的程序如下所示


<?php//连接数据库$link = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;******&#39;);if(!$link){die(&#39;连接失败:&#39;.mysql_error());
}//选择数据库mysql_select_db(&#39;bookstore&#39;,$link) or die(&#39;不能选定数据库bookstore:&#39; .mysql_error());
//执行SQL命令$insert = "insert into books(bookname, publisher, author, price, detail) values
(&#39;PHP&#39;,&#39;电子工业出版社&#39;,&#39;张三&#39;,&#39;80.00&#39;,&#39;PHP相关&#39;),
(&#39;ASP&#39;,&#39;电子工业出版社&#39;,&#39;李四&#39;,&#39;90.00&#39;,&#39;ASP相关&#39;),
(&#39;JSP&#39;,&#39;电子工业出版社&#39;,&#39;王五&#39;,&#39;70.00&#39;,&#39;JSP相关&#39;)";
$result = mysql_query($insert);
//操作结果集$result = mysql_query("SELECT id,bookname,publisher,author,price FROM books");
echo &#39;&#39;;
echo &#39;&#39;;
echo &#39;编号&#39;;
echo &#39;书名&#39;;
echo &#39;出版社&#39;;
echo &#39;作者&#39;;
echo &#39;价格&#39;;
echo &#39;&#39;;
while($assoc = mysql_fetch_assoc($result)) {
echo &#39;&#39;;echo "{$assoc[&#39;id&#39;]}";echo "{$assoc[&#39;bookname&#39;]}";echo "{$assoc[&#39;publisher&#39;]}";
echo "{$assoc[&#39;author&#39;]}";echo "{$assoc[&#39;price&#39;]}";echo &#39;&#39;;
}echo &#39;&#39;;//释放结果集mysql_free_result($result);//关闭数据库连接mysql_close($link);?>

以上就是前端学PHP之mysql扩展函数的内容,更多相关内容请关注PHP中文网(www.php.cn)!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn