PHP:MySQL數據庫訪問(mysqli & PDO)

bwnx 9年前發布 | 11K 次閱讀 MySQL PHP開發

一. 使用mysqli訪問數據庫

1. 連接數據庫

$db = new mysqli("localhost", "username", "password", "databaseName");
或者:
@ $db = mysqli_connect("localhost", "username", "password", "databaseName");

2. 關閉數據庫

$db->close();
或者:
mysqi_close($db);

3. 選擇使用的數據庫

$db->select_db(databaseName);
或者:
mysqli_select_db(databaseName);

4. 查詢數據庫

查詢:

$query = "SELECT * from dbName";
$result = $db->query($query);
或者:
mysqli_query($db, $query);

5. 檢索查詢結果

(1)查詢結果的行數:

$num_results = $result->num_rows;
或者:
$num_results = mysqli_num_rows($result);

(2)查詢結果的每一行內容:

$row = $result->fetch_assoc();
或者:
$row = mysqli_fetch_assoc($result);

獲取每一行的字段的值:

$row["books"]

(3)獲取查詢結果的列舉數組:

$row = $result->fetch_object();
或者:
$row = mysqli_fetch_object($result);

然后可以通過$row[0}、$row[1]或$row->title、$row->author等來訪問每個屬性。

6. 釋放結果集

$result->free();

或者:

mysqli_free_result($result);

</div>

二. 使用PDO訪問數據庫

1. 連接數據庫

$mysql = new PDO("mysql:host=localhost", $user, $password);
$mysql = new PDO("mysql:host=localhost;port=8090", $user, $password);
$mysql = new PDO("mysql:host=localhost;port=8090;dbname=android", $user, $password);
// 連接到一個本地MySQL服務器
$mysql = new PDO("mysql:unix_socket=/tmp/mysql.sock", $user, $password);

譬如:

$dbhost = "localhost";
$dbdatabase = "android";
$username = "android";
$userpass = "android";

$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase;

try { $dbh = new PDO($dsn,$username,$userpass); foreach($dbh->query('SELECT * from test') as $row) { print_r($row); } // 關閉數據庫連接 $dbh = null; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); }</pre>

2. 關閉數據庫

$conn = null;

3. 持久化連接

<?php
    $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(PDO::ATTR_PERSISTENT => true));
?>

4. 想數據庫中插入數據

try {
$dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit();

} catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); }</pre>

PDO 類的常用方法:

</tr> </tbody>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

PDOStatement的常用方法:

方法名 描述
commit() 提交一個事務。
__construct() 創建一個表示數據庫連接的 PDO 實例。
errorInfo() 返回最后一次操作數據庫的錯誤信息。
exec() 執行一條 SQL 語句,并返回受影響的行數。
getAttribute() 取回一個數據庫連接的屬性。
lastInsertId() 返回最后插入行的ID或序列值。
prepare() 備要執行的SQL語句并返回一個 PDOStatement 對象。
query() 執行 SQL 語句,返回PDOStatement對象,可以理解為結果集。
quote() 為SQL語句中的字符串添加引號。
setAttribute() 設置屬性。

</tr> </tbody>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr>

</tr> </tbody> </table>

記錄:踩過的一些坑

(1)問題:數據為中文時,在數據庫中可以正常顯示,但是一在前臺調用就出現亂碼。

解決:

1)首先檢查php文件是否有編碼格式聲明頭文件,如

</div>

header('COntent-Type:text/html;charset=utf-8');;如果是html文件則要檢查是否有meta聲明,如<meta charset="utf-8" />;

2)如果php文件的編碼格式沒問題,那問題可能出現在抓取數據過程中,數據的編碼格式有誤而導致亂碼。可以嘗試在數據庫查詢前插入編碼格式的顯式定義:$db->query("SET NAMES 'UTF8'");。

原文 http://www.dengzhr.com/others/backend/750

 本文由用戶 bwnx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
方法名 描述
bindColumn() 綁定一列到一個 PHP 變量。
bindParam() 綁定一個參數到指定的變量名。
bindValue() 把一個值綁定到一個參數。
closeCursor() 關閉游標,使語句能再次被執行。
columnCount() 返回結果集中的列數。
debugDumpParams() 打印一條 SQL 預處理命令。
errorCode() 獲取跟上一次語句句柄操作相關的 SQLSTATE。
errorInfo() 獲取跟上一次語句句柄操作相關的擴展錯誤信息。
execute() 執行一條預處理語句。
fetch() 從結果集中獲取下一行。
fetchAll() 返回一個包含結果集中所有行的數組。
fetchColumn() 從結果集中的下一行返回單獨的一列。
fetchObject() 獲取下一行并作為一個對象返回。
getAttribute() 檢索一個語句屬性。
getColumnMeta() 返回結果集中一列的元數據。
nextRowset() 在一個多行集語句句柄中推進到下一個行集。
rowCount() 返回受上一個 SQL 語句影響的行數。
setAttribute() 設置一個語句屬性。
setFetchMode() 為語句設置默認的獲取模式。
  • sesese色