筆記:PHP7使用mysqli(一)

任何編程語言連接數據庫都需要一定的協議,協議的主要內容包括數據庫類型、數據庫服務器地址(端口)、用戶名及密碼等,比如.NET的ODBC和OLEDB,Java的JDBC等。操作數據庫前,需要成功按照該協議通過數據庫服務器驗證的連接。PHP7+MySQL+Mysqli也不例外。

<?php
$link = new mysqli($db_dns, $db_username, $db_password);
if (! $link) {
        // echo "Error: Unable to connect to MySQL." . PHP_EOL;
        // echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
        // echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
        exit();
    }
?>

連接失敗則退出,成功則繼續。接下來編輯SQL語句開始操作數據庫,操作方式有兩種常見方法:一)使用$link->query(),二)使用statement預處理。

<?php
$testsql = "SELECT * FROM " . $table;
if ($link->query($testsql)) {
    echo "Execution succeed<br/>" . PHP_EOL;
}else{
    echo "Execution failed<br/>" . PHP_EOL;
}
?>
<?php
$testinsert = "select * from " . $table . " where created<=?";
// 預處理SQL語句
$stmt = $link->prepare($testinsert);
if (! $stmt) {
    echo "prepare failed<br/>" . PHP_EOL;
} else {
    // 綁定SQL語句中的輸入參數
    $bind = $stmt->bind_param("d", $testcreated);
    if (! $bind) {
        echo "bind failed";
    }
}
?>

一般情況下,基於安全的考量,建議採用方法二通過statement預處理相對比較好。爲了防止SQL注入,執行SQL語句查詢前,對該語句作相關較嚴格的檢查驗證,例如SQL語句長度限制、字段類型限制等。然後執行SQL語句查並檢查結果:

<?php
$result = $stmt->execute();
if ($result) {
    echo "Query succeed<br/>" . PHP_EOL;
}else{
    echo "Query failed<br/>" . PHP_EOL;
}
?>

查詢成功返回數據否則報錯:

<?php
// 綁定返回結果對應字段的變量名
$stmt->bind_result($id, $name, $password, $level, $fullname, $email, $created, $comment);
if (! $result) {
    echo "no result: insert result probably failed before<br/>" . PHP_EOL;
} else {
    echo "<table><tr><th>ID</th><th>Name</th><th>Password</th><th>Level</th><th>Fullname</th><th>Created</th></tr>";
    while ($stmt->fetch()) {
        // 遍歷查詢結果
        echo "<tr><td>" . $id . "</td><td>" . $name . "</td><td>$password</td><td>" . $level . "</td><td>" . $fullname . "</td><td>" . $created . "</td></tr>";
    }
    echo "</table>";
}
?>

最後重要的一點是:SQL查詢執行完畢後,需要關閉操作數據庫前成功獲取的MySQL連接。

<?php
// 關閉statement
$stmt->close();
// 關閉數據庫連接
mysqli_close($link);
?>

在實際應用中,應當注意操作SQL數據庫前後保持數據的完整性、連續性和一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章