1. 程式人生 > 實用技巧 >MySQL資料庫之MySQL擴充套件

MySQL資料庫之MySQL擴充套件

連線資料庫

資料庫在網站中的位置

  • 前端 -> HTTP協議 -> PHP伺服器 -> MySQL資料庫

開啟MySQL擴充套件

  • 在php.ini中開啟mysqli擴充套件
    • extension=php_mysqli.dll
    • 開啟擴充套件後重啟伺服器,就可以使用mysqli_函數了

連線資料庫

建立news資料庫

MariaDB [sel]> drop table if exists news;
# `Query OK, 0 rows affected (0.025 sec)`

MariaDB [sel]> 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=gbk comment '新聞表';
# `Query OK, 0 rows affected (0.024 sec)`

MariaDB [sel]> insert into news values (null,'基本知識','第1章 什麼是Javascript',unix_timestamp());
# `Query OK, 1 row affected (0.013 sec)`

MariaDB [sel]> insert into news values (null,'基本知識','第2章 HTML中的Javascript',unix_timestamp());
# `Query OK, 1 row affected (0.015 sec)`

MariaDB [sel]> select * from news;
+----+----------+--------------------------+------------+
| id | title    | content                  | createtime |
+----+----------+--------------------------+------------+
|  1 | 基本知識  | 第1章 什麼是Javascript    | 1607050534 |
|  2 | 基本知識  | 第2章 HTML中的Javascript  | 1607050590 |
+----+----------+--------------------------+------------+
# `2 rows in set (0.001 sec)`

連線資料庫

  • 語法
    • @ 隱藏錯誤
    • or die 條件顯示
mysqli_connect(主機IP,使用者名稱,密碼,資料庫名,埠號) 
//如果埠號是3306可以省略
mysqli_connect_error():獲取連線資料庫的錯誤資訊
mysqli_connect_errno():獲取連線資料庫的錯誤編碼
mysqli_set_charset(連線物件,字元編碼)  
<?php
$link= @mysqli_connect('localhost','root','','sel','3306');
var_dump($link);
if(mysqli_connect_error()){
	echo '錯誤號:'.mysqli_connect_errno(),'<br>';	
	echo '錯誤資訊:'.mysqli_connect_error();		
	exit;
}else{
    echo '資料庫連線成功!';
}
mysqli_set_charset($link,'utf8');	
?>
// 與資料庫相關用utf8,與頁面顯示相關用utf-8

操作資料語句

  • 資料操作語句

    • 通過mysqli_query()執行SQL語句
    • 增、刪、改語句執行成功返回true,失敗返回false
  • 使用的函式

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

增操作 insert

<?php
$link= @mysqli_connect('localhost','root','','sel','3306');
mysqli_set_charset($link,'utf8');
$rs= mysqli_query($link, "insert into news values (null, '基本知識', '第三章 語言基礎', unix_timestamp())");
if($rs){
    echo '自動增長的編號是:'.mysqli_insert_id($link).'<br>';
}
?>

改操作 update

<?php
$link= @mysqli_connect('localhost','root','','sel','3306');
mysqli_set_charset($link,'utf8');
$rs= mysqli_query($link, "update news set content='第3章 語言基礎' where id=3");
if($rs){
    echo '受影響的記錄數是:'.mysqli_affected_rows($link);
}
?>

刪操作 delete

<?php
$link= @mysqli_connect('localhost','root','','sel','3306');
mysqli_set_charset($link,'utf8');
$rs= mysqli_query($link, "delete from news where id>3");
if($rs){
    echo '受影響的記錄數是'.mysqli_affected_rows($link);
}
?>

資料查詢語句

  • 資料查詢語句

    • 資料查詢用select、desc、show,成功會返回結果集,失敗返回false
  • 使用的函式

    • mysqli_fetch_assoc() 將一條陣列匹配關聯陣列
    • mysqli_fetch_row() 將一條記錄匹配成索引陣列
    • mysqli_fetch_array() 將一條記錄匹配成既有關聯陣列又有索引陣列
    • mysqli_fetch_all() 匹配所有記錄
    • mysqli_num_rows() 總行數
    • mysqli_num_fields() 總記錄數
    • mysqli_free_result() 銷燬結果集
    • mysqli_close() 關閉連線

執行查詢語句

<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
// 執行查詢語句
$rs= mysqli_query($link,'select * from news');
// 將物件中的一條資料匹配成索引陣列,指標下移一條
$rows= mysqli_fetch_row($rs);
echo "<pre>";
print_r($rows);
echo "</pre>";
// 將物件中的一條資料匹配成關聯陣列,指標下移一條
$assocs= mysqli_fetch_assoc($rs);
echo "<pre>";
print_r($assocs);
echo "</pre>";
// 將物件中的一條資料匹配成索引,關聯陣列,指標下移一條
$arrays= mysqli_fetch_array($rs);
echo "<pre>";
print_r($arrays);
echo "</pre>";
?>

獲取總列數、總行數

<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

echo '總行數:'.mysqli_num_rows($rs),'<br>';
echo '總列數:'.mysqli_num_fields($rs),'<br>';
?>

獲取所有資料

  • 預設是索引陣列
<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

$list= mysqli_fetch_all($rs);		
echo '<pre>';
print_r($list);
echo '</pre>';
?>
  • 匹配成索引陣列
<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

$list= mysqli_fetch_all($rs,MYSQLI_NUM);
echo '<pre>';
print_r($list);
echo '</pre>';
?>
  • 匹配成關聯陣列
<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

$list=mysqli_fetch_all($rs,MYSQLI_ASSOC);
echo '<pre>';
print_r($list);
echo '</pre>';
?>
  • 匹配成關聯、索引陣列
<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

$list=mysqli_fetch_all($rs,MYSQLI_BOTH);
echo '<pre>';
print_r($list);
echo '</pre>';
?>

銷燬結果集

<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');
// 銷燬結果集
mysqli_free_result($rs);

$list=mysqli_fetch_all($rs,MYSQLI_BOTH);
echo '<pre>';
print_r($list);
echo '</pre>';
?>

關閉連線

<?php
$link= @mysqli_connect('localhost','root','','sel','3306') or die ('錯誤資訊:'.mysqli_connect_error());
// 關閉連線
mysqli_close($link);

mysqli_query($link,'set names utf8');
$rs= mysqli_query($link,'select * from news');

$list=mysqli_fetch_all($rs,MYSQLI_BOTH);
echo '<pre>';
print_r($list);
echo '</pre>';
?>

案例:新聞模組

包含檔案

  • 說明

    • 由於所有的操作都要連線資料庫,將連線資料庫的程式碼存放到包含檔案中
  • 步驟

    • 在站點下建立inc資料夾
    • 在inc下建立conn.php檔案,用來連線資料庫,程式碼就是上面連線資料庫的程式碼
# conn.php
<?php
$link= @mysqli_connect('localhost','root','','sel') or die('錯誤:'.mysqli_connect_error());
mysqli_set_charset($link,'utf8');
?>

顯示新聞

  • 步驟
    • 連線資料庫
    • 獲取資料
    • 遍歷迴圈資料
# list.php
<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="修改" onclick=""></td>
        <td><input type="button" value="刪除" onclick=""></td>
    </tr>
    <?php endforeach;?>
    <a href="./add.php">新增新聞</a>
</tr>
</table>
</body>

新增新聞

  • 步驟
    • 建立表單
    • 連線資料庫
    • 將新聞資料寫入到資料庫中
# add.php
<body>
<?php
if(!empty($_POST)) {
	//2、連線資料庫
	require './inc/conn.php';
    //3、插入資料
	$time= time();	
    $sql= "insert into news values (null,'{$_POST['title']}','{$_POST['content']}',$time)";  
	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>

刪除新聞

  • 步驟

    • 在list.php頁面點選刪除按鈕,跳轉到del.php頁面,傳遞刪除的id
    • 在del.php頁面連線資料庫
    • 通過id刪除資料
    • 刪除成功後,跳轉到list.php
  • 說明

    • 一個頁面是否寫HTML架構,取決於是否有顯示功能
    • 如果一個頁面只是做業務邏輯,沒有顯示功能,就不需要寫HTML架構,比如del.php頁面
# 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 '刪除失敗';
}
?>

修改新聞

  • 步驟
    • 顯示修改介面
      • 連線資料庫
      • 獲取修改的資料
      • 將資料顯示到表單中
    • 執行修改邏輯
      • 獲取新資料
      • 拼接修改的SQL語句,執行修改邏輯
# edit.php
<?php
//連線資料庫
require './inc/conn.php';
//1、獲取修改的資料庫
$sql= "select * from news where id={$_GET['id']}";	
$rs= mysqli_query($link,$sql);	//獲取修改的資料
$rows= mysqli_fetch_assoc($rs);	//將修改的資料匹配成一維關聯陣列
//2、執行修改的邏輯
if(!empty($_POST)) {
	$id=$_GET['id'];		
	$title=$_POST['title'];	//修改的標題
	$content=$_POST['content'];	//修改的內容
	$sql="update news set title='$title',content='$content' where id=$id"; 
	if(mysqli_query($link,$sql))
		header('location:listl.php');   //修改成功跳轉到list.php頁面
	else
		echo '錯誤:'.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="返回" onclick="location.href='list.php'">
</form>
</body>
</html>

資料庫備份與還原

  • 概念
    • 資料庫中的資料需要定期備份
    • 資料量小的可以一週備份一次
    • 資料量大的可以一天備份一次

資料備份

  • 語法
    • mysqldump 資料庫連線 資料庫 > SQL檔案備份地址
# mysqldump -uroot -p sel>D:\Database\sel.sql
Enter password:
# 例題

-- 將data資料庫中所有的表匯出到data.sql中
F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot data>c:\data.sql

-- 將data資料庫中的stuinfo、stumarks表
F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot data stuinfo stumarks>c:\data.sql

-- 匯出data資料庫,匯出的語句中帶有建立資料庫的語法
F:\wamp\PHPTutorial\MySQL\bin>mysqldump -uroot -proot -B data>c:\data1.sql

資料還原

  • MySQL的source指令
    • 需要登入MySQL才能使用
    • 地址分隔符用斜線,不能用反斜線
    • source 匯入的SQL檔案
MariaDB [(none)]> source D:/Database/sel.sql
  • 通過mysql指令資料還原
    • 不需要登入MySQL
    • mysql 連線資料庫 匯入的資料庫名 < 匯入的SQL檔案
# mysql -uroot -p sel < D:/Database/sel.sql
Enter password:
# 例題

F:\wamp\PHPTutorial\MySQL\bin>mysql -uroot -proot data1 < c:\data.sql

單例模式封裝

分析

  • 步驟
    • 實現單例
    • 初始化引數
    • 連線資料庫
    • 操作資料
      • 執行資料操作語句(增、刪、改)
      • 執行資料查詢語句
        • 返回二維陣列
        • 返回一維陣列
        • 返回一行一列

程式碼實現

第一步:實現單例

<?php
class MySQLDB {
	private static $instance;
	private function __construct() {

	}
	private function __clone() {
		
	}
	public static function getInstance() {
		if(!self::$instance instanceof self)
			self::$instance=new self();
		return self::$instance;
	}
}
//測試
$db=MySQLDB::getInstance();
var_dump($db);

注意:A instanceof B,表示A是否是B的型別,返回bool值

第二步:初始化引數

<?php
//封裝MySQL單例
class MySQLDB {
	private $host;		//主機地址
	private $port;		//埠號
	private $user;		//使用者名稱
	private $pwd;		//密碼
	private $dbname;	//資料接名
	private $charset;	//字符集
	private $link;		//連線物件
	private static $instance;
	private function __construct($param) {
		$this->initParam($param);		
	}
	private function __clone() {
		
	}
	//獲取單例
	public static function getInstance($param=array()) {
		if(!self::$instance instanceof self)
			self::$instance=new self($param);
		return self::$instance;
	}
	//初始化引數
	private function initParam($param) {
		$this->host=$param['host']??'127.0.0.1';
		$this->port=$param['port']??'3306';
		$this->user=$param['user']??'';
		$this->pwd=$param['pwd']??'';
		$this->dbname=$param['dbname']??'';
		$this->charset=$param['charset']??'utf8';
	}
}

//測試
//配置引數
$param=array(
	'user'		=>	'root',
	'pwd'		=>	'root',
	'dbname'	=>	'data'
);
//獲取單例
$db=MySQLDB::getInstance($param);
var_dump($db);

第三步:連線資料庫

<?php
//封裝MySQL單例
class MySQLDB {
	private $host;		//主機地址
	private $port;		//埠號
	private $user;		//使用者名稱
	private $pwd;		//密碼
	private $dbname;	//資料接名
	private $charset;	//字符集
	private $link;		//連線物件
	private static $instance;
	private function __construct($param) {
		$this->initParam($param);
		$this->initConnect();
	}
	private function __clone() {
		
	}
	//獲取單例
	public static function getInstance($param=array()) {
		if(!self::$instance instanceof self)
			self::$instance=new self($param);
		return self::$instance;
	}
	//初始化引數
	private function initParam($param) {
		$this->host=$param['host']??'127.0.0.1';
		$this->port=$param['port']??'3306';
		$this->user=$param['user']??'';
		$this->pwd=$param['pwd']??'';
		$this->dbname=$param['dbname']??'';
		$this->charset=$param['charset']??'utf8';
	}
	//連線資料庫
	private function initConnect() {
		$this->link=@mysqli_connect($this->host,$this->user,$this->pwd,$this->dbname);
		if(mysqli_connect_error()){
			echo '資料庫連線失敗<br>';
			echo '錯誤資訊:'.mysqli_connect_error(),'<br>';
			echo '錯誤碼:'.mysqli_connect_errno(),'<br>';
			exit;
		}
		mysqli_set_charset($this->link,$this->charset);
	}
}

//測試
//配置引數
$param=array(
	'user'		=>	'root',
	'pwd'		=>	'root',
	'dbname'	=>	'data'
);
//獲取單例
$db=MySQLDB::getInstance($param);
var_dump($db);

第四步:資料操作的功能

1、執行增、刪、改操作

<?php
//封裝MySQL單例
class MySQLDB {
	private $host;		//主機地址
	private $port;		//埠號
	private $user;		//使用者名稱
	private $pwd;		//密碼
	private $dbname;	//資料接名
	private $charset;	//字符集
	private $link;		//連線物件
	private static $instance;
	private function __construct($param) {
		$this->initParam($param);
		$this->initConnect();
	}
	private function __clone() {
		
	}
	//獲取單例
	public static function getInstance($param=array()) {
		if(!self::$instance instanceof self)
			self::$instance=new self($param);
		return self::$instance;
	}
	//初始化引數
	private function initParam($param) {
		$this->host=$param['host']??'127.0.0.1';
		$this->port=$param['port']??'3306';
		$this->user=$param['user']??'';
		$this->pwd=$param['pwd']??'';
		$this->dbname=$param['dbname']??'';
		$this->charset=$param['charset']??'utf8';
	}
	//連線資料庫
	private function initConnect() {
		$this->link=@mysqli_connect($this->host,$this->user,$this->pwd,$this->dbname);
		if(mysqli_connect_error()){
			echo '資料庫連線失敗<br>';
			echo '錯誤資訊:'.mysqli_connect_error(),'<br>';
			echo '錯誤碼:'.mysqli_connect_errno(),'<br>';
			exit;
		}
		mysqli_set_charset($this->link,$this->charset);
	}
	//執行資料庫的增、刪、改、查
	private function execute($sql) {
		if(!$rs=mysqli_query($this->link,$sql)){
			echo 'SQL語句執行失敗<br>';
			echo '錯誤資訊:'.mysqli_error($this->link),'<br>';
			echo '錯誤碼:'.mysqli_errno($this->link),'<br>';
			echo '錯誤的SQL語句:'.$sql,'<br>';
			exit;
		}
		return $rs;
	}
	/**
	*執行增、刪、改
	*@return bool 成功返回true,失敗返回false
	*/
	public function exec($sql) {
		$key=substr($sql,0,6);
		if(in_array($key,array('insert','update','delete')))
			return $this->execute($sql);
		else{
			echo '非法訪問<br>';
			exit;
		}

	}
	//獲取自動增長的編號
	public function getLastInsertId() {
		return mysqli_insert_id($this->link);
	}
}

//測試
//配置引數
$param=array(
	'user'		=>	'root',
	'pwd'		=>	'root',
	'dbname'	=>	'data'
);
//獲取單例
$db=MySQLDB::getInstance($param);
//更新
//$db->exec("update news set title='青草' where id=2");
//插入
if($db->exec("insert into news values (null,'aa','bb',unix_timestamp())"))
	echo '編號是:'.$db->getLastInsertId();

2、查詢結果

<?php
//封裝MySQL單例
class MySQLDB {
	private $host;		//主機地址
	private $port;		//埠號
	private $user;		//使用者名稱
	private $pwd;		//密碼
	private $dbname;	//資料接名
	private $charset;	//字符集
	private $link;		//連線物件
	private static $instance;
	private function __construct($param) {
		$this->initParam($param);
		$this->initConnect();
	}
	private function __clone() {
		
	}
	//獲取單例
	public static function getInstance($param=array()) {
		if(!self::$instance instanceof self)
			self::$instance=new self($param);
		return self::$instance;
	}
	//初始化引數
	private function initParam($param) {
		$this->host=$param['host']??'127.0.0.1';
		$this->port=$param['port']??'3306';
		$this->user=$param['user']??'';
		$this->pwd=$param['pwd']??'';
		$this->dbname=$param['dbname']??'';
		$this->charset=$param['charset']??'utf8';
	}
	//連線資料庫
	private function initConnect() {
		$this->link=@mysqli_connect($this->host,$this->user,$this->pwd,$this->dbname);
		if(mysqli_connect_error()){
			echo '資料庫連線失敗<br>';
			echo '錯誤資訊:'.mysqli_connect_error(),'<br>';
			echo '錯誤碼:'.mysqli_connect_errno(),'<br>';
			exit;
		}
		mysqli_set_charset($this->link,$this->charset);
	}
	//執行資料庫的增、刪、改、查
	private function execute($sql) {
		if(!$rs=mysqli_query($this->link,$sql)){
			echo 'SQL語句執行失敗<br>';
			echo '錯誤資訊:'.mysqli_error($this->link),'<br>';
			echo '錯誤碼:'.mysqli_errno($this->link),'<br>';
			echo '錯誤的SQL語句:'.$sql,'<br>';
			exit;
		}
		return $rs;
	}
	/**
	*執行增、刪、改
	*@return bool 成功返回true,失敗返回false
	*/
	public function exec($sql) {
		$key=substr($sql,0,6);
		if(in_array($key,array('insert','update','delete')))
			return $this->execute($sql);
		else{
			echo '非法訪問<br>';
			exit;
		}

	}
	//獲取自動增長的編號
	public function getLastInsertId() {
		return mysqli_insert_id($this->link);
	}

	//執行查詢語句
	private function query($sql) {
		if(substr($sql,0,6)=='select' || substr($sql,0,4)=='show' || substr($sql,0,4)=='desc'){
			return $this->execute($sql);
		}else{
			echo '非法訪問<br>';
			exit;
		}
	}
	/**
	*執行查詢語句,返回二維陣列
	*@$sql string 查詢sql語句
	*@type string assoc|num|both
	*/
	public function fetchAll($sql,$type='assoc') {
		$rs=$this->query($sql);
		$type=$this->getType($type);
		return mysqli_fetch_all($rs,$type);
	}
	//匹配一維陣列
	public function fetchRow($sql,$type='assoc') {
		$list=$this->fetchAll($sql,$type);
		if(!empty($list))
			return $list[0];
		return array();
	}
	//匹配一行一列
	public function fetchColumn($sql) {
		$list=$this->fetchRow($sql,'num');
		if(!empty($list))
			return $list[0];
		return null;
	}

	//獲取匹配型別
	private function getType($type) {
		switch($type){
			case 'num':
				return  MYSQLI_NUM;
			case 'both':
				return  MYSQLI_BOTH;
			default:
				return  MYSQLI_ASSOC;
		}
	}
}

//測試
//配置引數
$param=array(
	'user'		=>	'root',
	'pwd'		=>	'root',
	'dbname'	=>	'data'
);
//獲取單例
$db=MySQLDB::getInstance($param);
//更新
//$db->exec("update news set title='青草' where id=2");
//插入
/*
if($db->exec("insert into news values (null,'aa','bb',unix_timestamp())"))
	echo '編號是:'.$db->getLastInsertId();
*/

//查詢
//$list=$db->fetchAll('select * from news','aa');
//$list=$db->fetchRow('select * from news where id=1','aa');

$list=$db->fetchColumn('select count(*) from news');

echo '<pre>';
var_dump($list);