以下是对 PHP 代码的优化建议:

  1. 在函数内部使用了全局变量 '$error',并用 '&' 引用传递。这种写法不太规范,建议将 '$error' 定义为函数的返回值。
function connect($username, $password, $dbname, $host='localhost', $port='3306', $charset='utf8') {
    $conn = @mysqli_connect($host, $username, $password, $dbname, $port);
    if (!$conn) {
        return ['error' => iconv('gbk', 'utf-8', mysqli_connect_error()), 'conn' => false];
    }

    if (!mysqli_set_charset($conn, $charset)) {
        return ['error' => mysqli_error($conn), 'conn' => $conn];
    }

    return ['error' => null, 'conn' => $conn];
}

function execute($conn, $sql) {
    $res = mysqli_query($conn, $sql);
    if (!$res) {
        return ['error' => mysqli_error($conn), 'res' => false];
    }

    return ['error' => null, 'res' => $res];
}

function read($conn, $sql, $all = false) {
    $res = execute($conn, $sql)['res'];
    if (!$res) {
        return ['error' => execute($conn, $sql)['error'], 'data' => false];
    }

    if ($all) {
        $lists = [];
        while ($one = mysqli_fetch_assoc($res)) {
            $lists[] = $one;
        }
        return ['error' => null, 'data' => $lists];
    } else {
        return ['error' => null, 'data' => mysqli_fetch_assoc($res)];
    }
}

function write($conn, $sql, $insert = false) {
    $res = execute($conn, $sql)['res'];
    if (!$res) {
        return ['error' => execute($conn, $sql)['error'], 'result' => false];
    }

    if ($insert) {
        return ['error' => null, 'result' => mysqli_insert_id($conn)];
    } else {
        return ['error' => null, 'result' => mysqli_affected_rows($conn)];
    }
}
  1. read() 函数中,判断 $all 的值后,只返回了一条结果,应该将 return $lists; 移到循环外部,以返回全部结果。

  2. write() 函数中,判断 $insert 的值后,应该分别返回 mysqli_insert_id($conn)mysqli_affected_rows($conn),而不是使用 if-else 语句返回。

此外,还可以将函数的返回值设计为数组,包含错误信息和操作结果,以便更加方便地进行错误处理和结果获取。

优化后的代码示例:

// 连接数据库
$conn = connect('root', 'root', 'stu')['conn'];
if (!$conn) {
    die(connect('root', 'root', 'stu')['error']);
}

// 执行 SQL 语句
$res = execute($conn, 'select * from shenzhou')['res'];
if (!$res) {
    die(execute($conn, 'select * from shenzhou')['error']);
}

// 读取数据
$list = read($conn, 'select * from shenzhou', true)['data'];
var_dump($list);

// 写入数据
$result = write($conn, 'update shenzhou set age=age+1 limit 3')['result'];
echo $result;

通过以上优化,代码更加规范、易于维护,也更加易于阅读和理解。

PHP MySQL 数据库操作代码优化建议

原文地址: https://www.cveoy.top/t/topic/ovPw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录