笔记: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数据库前后保持数据的完整性、连续性和一致性。

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