mysqli 分為以下三個類別
mysqli:負責控制與mysql的連線,執行SQL查詢,執行select後會得到查詢結果
之mysql_result物件
mysqli_result:內含select的查詢結果
mysqli_stmt:用來定義執行參數化的SQL指令,需透過$mysqli->perpare建立mysql_stmt
#建立連線
不可設定參數
$mysqli=new mysqli($mysqlhost,$mysqluser,$mysqlpassword,$mysqldb);
#TEST連線是否成功
mysql_connect_errno()
if (mysql_connect_errno()) {echo "<p> Sorry,無法連線</p>"};
#close連線
$mysqli->close();
設定參數用法
$mysqli=mysqli_init(); //建立mysqli物件
$mysqli->options(xxxxx); //設定連線選項(可省略)
$mysqli->ssl_set(xxxx); //設定SSL選項(可省略)
$mysqli->real_connect($mysqlhost,$mysqluser,$mysqlpassword,$mysqldb);
//與mysql,建立連線
#執行SQL指令
$mysqli->query("insert into,update delete")
$mysqli->affected_row //傳回更改筆數
$mysqli->insert_id //傳回insert 指令所產生之流水號
#select後回傳一個mysqli_result物件
$result->num_rows //查詢結果的資料筆數
$result->field_count //欄位數量
$mysqli->errno $mysqli->error //取得select時錯誤訊息
#select結果讀取
$row=$result->fetch_row(); //陣列形態,可用$row[$n]存取
$row=$result->fetch_array(); //關聯陣列,用$row[$n]或$row[$colname]存取
//,名稱區分大小寫
$row=$result->fetch_assoc(); //關聯陣列,只能用$row[$colname]存取
$row=$result->fetch_abject(); //以物件方式存取,$row->colname
##每次呼叫都會傳回下一筆,直到最後傳回FALSE
$result->data_seek($row_number)跳到指定欄位
#select結果之相關資訊
$inf=$result->fetch_fields();傳回相關物件資訊
$inf[$n]->name //欄位名稱
$inf[$n]->table //欄位所屬資料表
$inf[$n]->max_length //最長資料長度
$inf[$n]->type //資料形態
#將參數和php變數連結
始用前必需先用$mysqli->prepare指定要執行的SQL指令,用?代表參數位置
$myst=$mysqli->prepare("insert into titles(titles,subtitle,langID)
values(?,?,?)");
與PHP變數連結
$myst->bind_param('xxx',$title,$subtitle,$langID)
$title="new one";$subtitle="new two";$langID="new three";
可以一直重覆run,不會回傳mysqli_result;
$myst->execute();
直到close
$stmt->close();
######### select ############
$myst->bind_prepare("select titleID,title from titles");
$myst->execute();//執行(此行可省略)
$myst->store_result();//將結果傳回
$myst->bind_result($titleId,$title); //與變數連結
while ($myst->fetch())
printf("<br />%d %s\n",htmlspecialchars($titleID),
htmlspecialchars($title));
$myst->close;
#字串特殊字元
$mysqli->escape_string($data) //escape會將' " 或是0byte 加上跳脫字元
留言列表