標籤:php入門 web開發
1.串連MySQL資料庫
<?php$mysqli = new mysqli("localhost", "root", "123456", "mydb");if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error;}else{ echo "success connected!";}
2.執行DDL語句
可以通過上面建立的$mysqli對象的query方法來執行sql語句,sql語句作為一個字串傳給query()方法
query()支援將語句執行的執行結果緩衝到用戶端,與real_query()和multi_query()方法相比,更常用。
$mysqli->query("drop table if exists test");$mysqli->query("create table test(id int primary key auto_increment)");$mysqli->query("insert into test values(1)");
如果需要連續執行多條sql語句則必須要使用multi_query(),多條sql語句使用分號隔開。
$sql="insert into test values(400);select * from test;";$mysqli->multi_query($sql);$res = $mysqli->store_result();var_dump($res->fetch_all(MYSQLI_ASSOC));$res->close();
3.執行查詢語句
$mysqli對象通過query方法執行查詢語句返回一個結果對象$res,該對象緩衝了查詢的結果,通過$res對象的fetch_assoc()方法可以一次返回一行資料,該行資料被存到一個索引數組當中,通過資料欄位名作為索引可以取得對應的資料
$res = $mysqli->query("select * from test");if($res != null){ while($row = $res->fetch_assoc()){ echo $row["id"]; echo gettype($row["id"]);//string類型 }}
注意mysqli的query()方法執行的是沒有先行編譯的語句,通過query()返回的結果預設都是字串類型(string),如果想要使得結果返回正確的PHP的數實值型別,可以為mysqli添加屬性MYSQLI_OPT_INT_AND_FLOAT_NATIVE
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, 1);
4.執行先行編譯語句
通過執行先行編譯語句,可以為sql語句動態指定參數。
$stmt = $mysqli->prepare("insert into test values(?)");//先行編譯sql語句$id = 9;$stmt->bind_param("i",$id);//綁定參數$stmt->execute();//執行sql語句$stmt->close();//關閉先行編譯語句,釋放資源,切記不要忘了執行
與非先行編譯執行的sql語句相比,通過先行編譯執行的語句的查詢結果返回的值會自動轉為正確的類型(而非都是string類型)。
$stmt = $mysqli->prepare("select * from test");$stmt->execute();$res = $stmt->get_result();//擷取查詢結果while($row = $res->fetch_assoc()){ echo $row["id"]; echo gettype($row["id"]);//integer 而不是string}
使用先行編譯的sql語句可以有效防止sql注入,增加對資料庫操作的安全性。
5.執行預存程序
$mysqli->query("create procedure p(IN id_val int) begin insert into test(id) values(id_val);END;");$mysqli->query("call p(10)");//執行預存程序$res = $mysqli->query("select * from test");var_dump($res->fetch_all());
6.執行事務
MySQL是否支援事務取決於它的儲存引擎,從MySQL5.5開始,預設的儲存引擎改為InnoDB,InnoDB完全支援事務的ACID特性。
$mysqli->autocommit(false);//設定自動認可事務為false$mysqli->query("insert into test values(100)");$mysqli->rollback();//復原事務,100沒有插入$mysqli->query("insert into test values(101)");$mysqli->commit();//提交事務,僅僅插入了101
7.中繼資料Metadata
中繼資料用來描述結果集中的列,通過mysqli_result介面可以獲得中繼資料的資訊
$res = $mysqli->query("select * from test");var_dump($res->fetch_fields());
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/88/15/wKiom1fpCsTjmO-3AABoRAG9HQE832.jpg-wh_500x0-wm_3-wmp_4-s_1000397637.jpg" title="1.jpg" alt="wKiom1fpCsTjmO-3AABoRAG9HQE832.jpg-wh_50" />
還有很多方法沒有涉及到,這裡僅僅涉及了常用的一些方法,要瞭解更多方法可以自行尋找PHP Mannual。
本文出自 “厚積薄發” 部落格,請務必保留此出處http://joedlut.blog.51cto.com/6570198/1856749
PHP(14)使用mysqli操作MySQL