php操作mysql


  首先先吐槽下mysqli與mysql,前者是后者的改進版,我的ps不支持mysql相關函數,而且我看的是w3school上的教程,呵呵,w3school上的代碼用的是舊版本的mysql函數,我去,讓我一個個百mysqli系列函數的用法。。。

  php5以上的版本,建議使用mysqli和PDO。有個網站,我剛發現的:http://www.runoob.com

  mysqli和PDO各有各的優勢。PDO應用於12中數據庫,是一種通用的寫法;而mysqli是專門針對mysql的。兩者都是面向對象,而mysqli還提高了API接口。兩者都支持預處理語句,預處理語句可以防止SQL注入,對於web項目的安全性是非常重要的。因為我現在專門開發mysql項目,故而就使用mysqli吧,PDO只了解即可。PDO的學習可以參考上面那個網址。

  下面說mysqli操作數據庫。

 做個小目錄:

1.連接數據庫

2.關閉連接

3.創建數據庫

4.創建表

5.插入數據

6.插入多條數據

7.預處理語句

8.讀取數據

9.where

10.order by

11.update

12.delete

13.ODBC

 

 

 

連接數據庫:

mysqli(面向對象)

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";

// 創建連接
$conn = new mysqli($servername, $username, $password);

// 檢測連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
注意在以上面向對象的實例中 $connect_error 是在 PHP 5.2.9 和 5.3.0 中添加的。如果你需要兼容更早版本 請使用以下代碼替換:

// 檢測連接
if (mysqli_connect_error()) {
    die("Database connection failed: " . mysqli_connect_error());
}

mysqli(面向過程)

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";

// 創建連接
$conn = mysqli_connect($servername, $username, $password);

// 檢測連接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

 

關閉連接:

mysqli(面向對象)

$conn->close();

mysqli(面向過程)

mysqli_close($conn); 

 

創建數據庫:

CREATE DATABASE語句用於創建數據庫:

mysqli面向對象:這里創建了tdb0.

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";

// 創建連接
$conn = mysqli_connect($servername, $username, $password);

// 檢測連接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully<br>";

// Create database
$sql = "CREATE DATABASE tdb0";
if ($conn->query($sql) === TRUE) {
    echo "Database created successfully";
} else {
    echo "Error creating database: " . $conn->error;
}

$conn->close();
?>
注意: 當你創建一個新的數據庫時,你必須為 mysqli 對象指定三個參數 (servername, username 和 password)。

Tip: 如果你使用其他端口(默認為3306),為數據庫參數添加空字符串,如: new mysqli("localhost", "username", "password", "", port)

mysqli面向過程:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";

// 創建連接
$conn = mysqli_connect($servername, $username, $password);
// 檢測連接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Create database
$sql = "CREATE DATABASE tdb1";
if (mysqli_query($conn, $sql)) {
    echo "Database created successfully";
} else {
    echo "Error creating database: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

 

創建表:

CREATE TABLE 語句用於創建 MySQL 表。

mysqli面向對象:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// sql to create table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";

if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

$conn->close();
?>

mysqli面向過程:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 檢測連接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// sql to create table
$sql = "CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";

if (mysqli_query($conn, $sql)) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . mysqli_error($conn);
}

mysqli_close($conn);
?> 

上表中的注意事項:

數據類型指定列可以存儲什么類型的數據。完整的數據類型請參考我們的 數據類型參考手冊

在設置了數據類型后,你可以為每個列指定其他選項的屬性:

  • NOT NULL - 沒一行都必須含有值(不能為空),null 值是不允許的。
  • DEFAULT value - 設置默認值
  • UNSIGNED - 使用無符號數值類型,0 及正數
  • AUTO INCREMENT - 設置 MySQL 字段的值在新增記錄時每次自動增長 1
  • PRIMARY KEY - 設置數據表中每條記錄的唯一標識。 通常列的 PRIMARY KEY 設置為 ID 數值,與 AUTO_INCREMENT 一起使用。

每個表都應該有一個主鍵(本列為 "id" 列),主鍵必須包含唯一的值。

 

插入數據:

以下為一些語法規則:

  • PHP 中 SQL 查詢語句必須使用引號
  • 在 SQL 查詢語句中的字符串值必須加引號
  • 數值的值不需要引號
  • NULL 值不需要引號

INSERT INTO 語句通常用於向 MySQL 表添加新的記錄:

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...) 
注意: 如果列設置 AUTO_INCREMENT (如 "id" 列) 或 TIMESTAMP (如 "reg_date" 列),,我們就不需要在 SQL 查詢語句中指定值; MySQL 會自動為該列添加值。

mysqli面向對象:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

mysqli面向過程:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 檢測連接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";

if (mysqli_query($conn, $sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?> 

 

插入多條語句:

mysqli_multi_query() 函數可用來執行多條SQL語句。

mysqli面向對象:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建鏈接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢查鏈接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

if ($conn->multi_query($sql) === TRUE) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

mysqli面向過程:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建鏈接
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 檢查鏈接
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

if (mysqli_multi_query($conn, $sql)) {
    echo "New records created successfully";
} else {
    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}

mysqli_close($conn);
?> 

 

預處理語句及綁定參數

預處理語句用於執行多個相同的 SQL 語句,並且執行效率更高。

預處理語句的工作原理如下:

  1. 預處理:創建 SQL 語句模板並發送到數據庫。預留的值使用參數 "?" 標記 。例如:INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)
  2. 數據庫解析,編譯,對SQL語句模板執行查詢優化,並存儲結果不輸出
  3. 執行:最后,將應用綁定的值傳遞給參數("?" 標記),數據庫執行語句。應用可以多次執行語句,如果參數的值不一樣。

相比於直接執行SQL語句,預處理語句有兩個主要優點:

  • 預處理語句大大減少了分析時間,只做了一次查詢(雖然語句多次執行)
  • 綁定參數減少了服務器帶寬,你只需要發送查詢的參數,而不是整個語句
  • 預處理語句針對SQL注入是非常有用的,因為 參數值發送后使用不同的協議,保證了數據的合法性。
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    $sql = "INSERT INTO MyGuests VALUES(?, ?, ?)";

    // 為 mysqli_stmt_prepare() 初始化 statement 對象
    $stmt = mysqli_stmt_init($conn);

    //預處理語句
    if (mysqli_stmt_prepare($stmt, $sql)) {
        // 綁定參數
        mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);

        // 設置參數並執行
        $firstname = 'John';
        $lastname = 'Doe';
        $email = 'john@example.com';
        mysqli_stmt_execute($stmt);

        $firstname = 'Mary';
        $lastname = 'Moe';
        $email = 'mary@example.com';
        mysqli_stmt_execute($stmt);

        $firstname = 'Julie';
        $lastname = 'Dooley';
        $email = 'julie@example.com';
        mysqli_stmt_execute($stmt);
    }
}
?> 
<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);

// 檢測連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES(?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// 設置參數並執行
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?> 

我們可以看到以上實例中使用模塊化來處理問題。我們可以通過創建代碼塊實現更簡單的讀取和管理。

注意參數的綁定。讓我們看下 mysqli_stmt_bind_param() 中的代碼:

mysqli_stmt_bind_param($stmt, 'sss', $firstname, $lastname, $email);

該函數綁定參數查詢並將參數傳遞給數據庫。第二個參數是 "sss" 。以下列表展示了參數的類型。 s 字符告訴 mysql 參數是字符串。

This argument may be one of four types:

  • i - integer
  • d - double
  • s - string
  • b - BLOB

每個參數必須指定類型,來保證數據的安全性。通過類型的判斷可以減少SQL注入漏洞帶來的風險。

 

從 MySQL 數據庫讀取數據

SELECT 語句用於從數據表中讀取數據:

SELECT column_name(s) FROM table_name 

mysqli面向對象:

<?php
$servername = "127.0.0.1";
$username = "root";
$password = "";
$dbname="jiu151231";

// 創建連接
$conn = new mysqli($servername, $username, $password, $dbname);
// 檢測連接
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 輸出每行數據
    while($row = $result->fetch_assoc()) {
        echo "<br> id: ". $row["id"]. " - Name: ". $row["firstname"]. " " . $row["lastname"];
    }
} else {
    echo "0 results";
}
$conn->close();
?> 

 

where子句

WHERE 子句用於提取滿足指定標准的的記錄。

SELECT column_name(s)
FROM table_name
WHERE column_name operator value 
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM Persons
WHERE FirstName='Peter'");

while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
?> 

 

Order By 關鍵詞

ORDER BY 關鍵詞用於對記錄集中的數據進行排序。

ORDER BY 關鍵詞默認對記錄進行升序排序。默認為ASC。

如果你想降序排序,請使用 DESC 關鍵字。

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC 
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age");

while($row = mysqli_fetch_array($result))
{
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br>";
}

mysqli_close($con);
?> 

根據兩列進行排序

可以根據多個列進行排序。當按照多個列進行排序時,只有第一列的值相同時才使用第二列:

SELECT column_name(s)
FROM table_name
ORDER BY column1, column2 

 

Update

UPDATE 語句用於更新數據庫表中已存在的記錄。

UPDATE table_name
SET column1=value, column2=value2,...
WHERE some_column=some_value 

注釋:請注意 UPDATE 語法中的 WHERE 子句。WHERE 子句規定了哪些記錄需要更新。如果您想省去 WHERE 子句,所有的記錄都會被更新!

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"UPDATE Persons SET Age=36
WHERE FirstName='Peter' AND LastName='Griffin'");

mysqli_close($con);
?> 

 

Delete

DELETE FROM 語句用於從數據庫表中刪除記錄。

DELETE FROM table_name
WHERE some_column = some_value 

注釋:請注意 DELETE 語法中的 WHERE 子句。WHERE 子句規定了哪些記錄需要刪除。如果您想省去 WHERE 子句,所有的記錄都會被刪除!

<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin'");

mysqli_close($con);
?> 

 

ODBC

ODBC 是一種應用程序編程接口(Application Programming Interface,API),使我們有能力連接到某個數據源(比如一個 MS Access 數據庫)。

創建 ODBC 連接

通過一個 ODBC 連接,您可以連接到您的網絡中的任何計算機上的任何數據庫,只要 ODBC 連接是可用的。

這是創建到達 MS Access 數據庫的 ODBC 連接的方法:

  1. 在控制面板中打開管理工具圖標。
  2. 雙擊其中的數據源(ODBC)圖標。
  3. 選擇系統 DSN 選項卡。
  4. 點擊系統 DSN 選項卡中的添加
  5. 選擇Microsoft Access Driver。點擊完成
  6. 在下一個界面,點擊選擇來定位數據庫。
  7. 為數據庫起一個數據源名(DSN)
  8. 點擊確定

請注意,必須在您的網站所在的計算機上完成這個配置。如果您的計算機上正在運行 Internet 信息服務(IIS),上面的指令將會生效,但是如果您的網站位於遠程服務器,您必須擁有對該服務器的物理訪問權限,或者請您的主機提供商為您建立 DSN。

連接到 ODBC

odbc_connect() 函數用於連接到 ODBC 數據源。該函數有四個參數:數據源名、用戶名、密碼以及可選的指針類型。

odbc_exec() 函數用於執行 SQL 語句。

實例

下面的實例創建了到達名為 northwind 的 DSN 的連接,沒有用戶名和密碼。然后創建並執行一條 SQL 語句:

$conn=odbc_connect('northwind','','');
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql); 

取回記錄

odbc_fetch_row() 函數用於從結果集中返回記錄。如果能夠返回行,則函數返回 true,否則返回 false。

該函數有兩個參數:ODBC 結果標識符和可選的行號:

odbc_fetch_row($rs) 

從記錄中取回字段

odbc_result() 函數用於從記錄中讀取字段。該函數有兩個參數:ODBC 結果標識符和字段編號或名稱。

下面的代碼行從記錄中返回第一個字段的值:

$compname=odbc_result($rs,1); 

下面的代碼行返回名為 "CompanyName" 的字段的值:

$compname=odbc_result($rs,"CompanyName"); 

關閉 ODBC 連接

odbc_close() 函數用於關閉 ODBC 連接。

odbc_close($conn); 

ODBC 實例

下面的實例展示了如何首先創建一個數據庫連接,接着創建一個結果集,然后在 HTML 表格中顯示數據。

<html>
<body>

<?php
$conn=odbc_connect('northwind','','');
if (!$conn)
{exit("Connection Failed: " . $conn);}
$sql="SELECT * FROM customers";
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";
while (odbc_fetch_row($rs))
{
$compname=odbc_result($rs,"CompanyName");
$conname=odbc_result($rs,"ContactName");
echo "<tr><td>$compname</td>";
echo "<td>$conname</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>

</body>
</html> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM