你做好程序以后,把數(shù)據(jù)庫導出成sql文件
創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為平遙企業(yè)提供專業(yè)的成都網(wǎng)站制作、成都網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設,平遙網(wǎng)站改版等技術服務。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
1、連接數(shù)據(jù)庫
2、讀取這個sql文件里的sql語句,并執(zhí)行
3、生成一個數(shù)據(jù)庫連接參數(shù)的php文件
?php
$con = mysql_connect("localhost","peter","abc123");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
if (mysql_query("CREATE DATABASE my_db",$con))
{
echo "Database created";
}
else
{
echo "Error creating database: " . mysql_error();
}
mysql_close($con);
?
?php
class ReadSql {
//數(shù)據(jù)庫連接
protected $connect = null;
//數(shù)據(jù)庫對象
protected $db = null;
//sql文件
public $sqlFile = "";
//sql語句集
public $sqlArr = array();
public function __construct($host, $user, $pw, $db_name) {
$host = empty($host) ? C("DB_HOST") : $host;
$user = empty($user) ? C("DB_USER") : $user;
$pw = empty($pw) ? C("DB_PWD") : $pw;
$db_name = empty($db_name) ? C("DB_NAME") : $db_name;
//連接數(shù)據(jù)庫
$this-connect = mysql_connect($host, $user, $pw) or die("Could not connect: " . mysql_error());
$this-db = mysql_select_db($db_name, $this-connect) or die("Yon can not select the table:" . mysql_error());
}
//導入sql文件
public function Import($url) {
$this-sqlFile = file_get_contents($url);
if (!$this-sqlFile) {
exit("打開文件錯誤");
} else {
$this-GetSqlArr();
if ($this-Runsql()) {
return true;
}
}
}
//獲取sql語句數(shù)組
public function GetSqlArr() {
//去除注釋
$str = $this-sqlFile;
$str = preg_replace('/--.*/i', '', $str);
$str = preg_replace('/\/\*.*\*\/(\;)?/i', '', $str);
//去除空格 創(chuàng)建數(shù)組
$str = explode(";\n", $str);
foreach ($str as $v) {
$v = trim($v);
if (empty($v)) {
continue;
} else {
$this-sqlArr[] = $v;
}
}
}
//執(zhí)行sql文件
public function RunSql() {
foreach ($this-sqlArr as $k = $v) {
if (!mysql_query($v)) {
exit("sql語句錯誤:第" . $k . "行" . mysql_error());
}
}
return true;
}
}
//范例:
header("Content-type:text/html;charset=utf-8");
$sql = new ReadSql("localhost", "root", "", "log_db");
$rst = $sql-Import("./log_db.sql");
if ($rst) {
echo "Success!";
}
?
function open_bm($o_bm, $o_pxbm, $o_fs) //打開一張表
{
//此處沒有返回結果集,加上return就可以了
return $this-query("SELECT * FROM $o_bm order by $o_pxbm $o_fs");
}
此外, mysql_result的第一個參數(shù)是resource.第二個是數(shù)據(jù)行編號. 數(shù)據(jù)行編號從0開始,你輸入1時請確保結果集至少2條數(shù)據(jù)
建議你每個function都應該有return.
此類庫簡單、易用,便于你自己修改和對功能的改善,能解決大部分
PHP
項目中執(zhí)行的
SQL
操作。
初步工作
首先,請大家下載這個類庫
M.class.php 再下載一個
Mysqli
連接數(shù)據(jù)庫的類庫
MysqliDb.class.php(打包下載地址)
新建一個
includes
的文件夾,將下載下來的兩個
class
文件,放進去。
然后,請你在項目下創(chuàng)建一個
test.php
文件。注:UTF-8
文件格式
請先根據(jù)你機器的情況,填充以下代碼,用于連接數(shù)據(jù)庫:
復制代碼
代碼如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//數(shù)據(jù)庫服務器地址
define('DB_USER',
'root');
//數(shù)據(jù)庫用戶名
define('DB_PWD',
'×××');//數(shù)據(jù)庫密碼
define('DB_NAME',
'×××');
//數(shù)據(jù)庫名稱
define('DB_PORT',
'3306');
//數(shù)據(jù)庫端口
function
__autoload($className)
{
require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自動加載
class
文件
}
好了,上面的這些操作都是初步工作,下面正式進入類庫的講解。
類庫講解
首先,我們得實例化
M.class.php,實例化很簡單:
復制代碼
代碼如下:
$m
=
new
M();
//這步操作代表
M.class.php
中的所有功能都封裝在了變量
$m
中
注:
1、M類庫中的方法參數(shù)說明,請到
M.class.php
文件中看詳細的注釋,這里不再進行敘述。建議在學習的時候,對照著看下文件中的參數(shù)即注釋。
2、講解代碼中用到的數(shù)據(jù)庫結構為:
復制代碼
代碼如下:
CREATE
TABLE
`user`
(
`id`
int(8)
unsigned
NOT
NULL
auto_increment,
`name`
varchar(50)
default
NULL,
`email`
varchar(100)
default
NULL,
`age`
smallint(3)
default
NULL,
`class_id`
int(8)
default
NULL,
`commit_time`
int(10)
default
NULL,
PRIMARY
KEY
(`id`),
KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
復制代碼
代碼如下:
CREATE
TABLE
`class`
(
`class_id`
int(8)
NOT
NULL
auto_increment,
`class_name`
varchar(100)
default
NULL,
PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
并添加一條測試數(shù)據(jù)。
3、M類庫中,大部分方法都分兩中類型,即:SQL方法;拼接方法,具體在實例中可以看出
4、以下稱述中的
M
為
M.class.php
文件
方法1、Insert()
添加數(shù)據(jù)
Insert
方法的全部使用案例如下:
復制代碼
代碼如下:
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina.com',
'23',
time()));
//
拼接方法:往`user`表中添加一條數(shù)據(jù),返回值為數(shù)據(jù)庫影響的行數(shù)
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina.com',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增長id)
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'zhangxiaohua@sina.com.cn',
'22',
'".time()."')");
//SQL方法,返回值為數(shù)據(jù)庫影響的行數(shù)
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('張小花',
'zhangxiaohua@sina.com.cn',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
注:Insert
方法中的第二個參數(shù)若為null,可自動獲得插入表除
auto_increment
字段之外的所有字段,詳情請看M源文件;若要返回值為最后插入的
ID,那么請設置
Insert
方法的最后一個參數(shù)為
true(默認是false);
方法2、Update()
修改數(shù)據(jù)
update
方法的全部使用案例如下:
復制代碼
代碼如下:
$m-Update("user",
array('name'='李茹茹',
'age'=24),
"id=1");
//拼接方法,修改id為1的數(shù)據(jù)的名稱為“李茹茹”;年齡為“24”,其方法的返回值為受影響的行數(shù)
$m-Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
刪除數(shù)據(jù)
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m-Del('user',
'id=3');
//拼接方法:刪除`user`表中
id
為3的數(shù)據(jù),返回受影響的行數(shù)
$m-Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:刪除`user`表中
id
為4的數(shù)據(jù),返回受影響的行數(shù)
$m-Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:刪除多條數(shù)據(jù),刪除`user`表中
id
為
10、11、12
的數(shù)據(jù),返回受影響的行數(shù)
方法4、Total()
獲取記錄數(shù),返回值都為int
Del
方法的全部使用案例如下:
復制代碼
代碼如下:
$m-Total('user');
//拼接方法:返回
`user`表中的記錄數(shù),無條件
$m-Total('user',
'id1');
//拼接方法:返回
`user`表中
id
大于1的記錄數(shù),有條件
$m-Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,注:使用SQL方法,語句中必須使用
"AS
total",否則會報錯
方法5、IsExists()
檢查數(shù)據(jù)是否存在,返回值為boolean
復制代碼
代碼如下:
$m-IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`為“焦焦”的數(shù)據(jù),返回true,若不存在,返回false
方法6、InsertId()
獲取表下一個添加的自動增長id,注意,這里不進行添加操作,只是獲取下一個增長id
復制代碼
代碼如下:
echo
$m-InsertId('user');
//獲取`user`
表下一個添加的自動增長id
方法7、GetRow()
返回單條數(shù)據(jù),返回值為一維數(shù)組
GetRow
方法的全部使用案例如下:
復制代碼
代碼如下:
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一維數(shù)組,例如:Array
(
[name]
=
焦焦
[email]
=
liruxing1715@sina.com
)
$data
=
$m-GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查詢
$data
=
$m-GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m-GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查詢
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`");
//如果沒有指定條件應該是顯示全部信息,但是在此方法中將默認顯示第一條(不推薦這么使用!?。。?/p>
$data
是查詢出來的一維數(shù)組。
方法8、GetOne()
返回單個數(shù)據(jù)
GetOne
方法的全部使用案例如下:
復制代碼
代碼如下:
$name
=
$m-GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一個字符串,例如:焦焦
$name
=
$m-GetOne("user",
"name",
"id=1");
//拼接方法,返回一個字符串,例如:焦焦
方法9、FetchAll()
返回所有記錄
復制代碼
代碼如下:
$data
=
$m-FetchAll("user");
//返回`user`表中的所有記錄,以二維數(shù)組的形式
$data
=
$m-FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m-FetchAll("user",
"name,email",
"id1",
'id
DESC',
'2');
//返回兩條id1的數(shù)據(jù),只顯示name,email,并且以id
為倒序排序。注:請注意該方法的最后一個參數(shù)也可以為'0,2',目的是為分頁準備的,如果第一頁為'0,2'的話,那么第二頁就是'2,2'
//該方法也支持聯(lián)表查詢和多表查詢,下面以聯(lián)表查詢?yōu)槔?/p>
$data
=
$m-FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:該拼接方法中,ON
添加的位置
注:對于該
FetchAll
方法,后續(xù)我會寫一篇使用該方法進行完美分頁的文章??!請關注。
方法10、MultiQuery()
執(zhí)行多條SQL語句
復制代碼
代碼如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('賈花花',
'jiahuahua@sina.com.cn',
'22',
'1',
'".time()."')";
//添加一個名叫“賈花花”的學生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//刪除一條名叫“焦焦”的學生信息
//解釋:$sql
是多條
SQL
以英文;(分號)拼接起來的
$data
=
$m-MultiQuery($sql);
//返回為true,代表執(zhí)行成功;為false,代表執(zhí)行失敗
類庫講解完畢
到此該類庫的全部功能就講解完畢,希望你能多看看M文件,了解其內(nèi)部運行的機制。M
文件不會存在執(zhí)行緩慢情況,請大家放心使用。
如果在使用過程中出現(xiàn)
SQL
拼接錯誤,類庫會報出友善的錯誤提示。
有問題請留言,歡迎大家的批評和建議,加油!學習好運。