PHP 我有一个数据库连接文件,我应该把我的数据库查询函数放在同一个文件中吗

PHP I have a database connect file, should i put my database querie functions in the same file

为了更好地解释我的问题,我有两个文件:dbh.inc.php

$dbServername = "localhost";
$dbUsername = "xxxxx";
$dbPassword = "secret";
$dbName = "databasename";

$conn = mysqli_connect($dbServername, $dbUsername, $dbPassword, $dbName);
mysqli_set_charset($conn,"utf8");

if (!$conn) {
  die("Connection failed: ".mysqli_connect_error());
}

$table1 = "users";//1
$table2 = "userprofile";//2
$table3 = "twofactorauth";//3

还有:数据库-query.func.php

function selectdb($data, $values, $url) {
  include ('dbh.inc.php');
  extract($data);
  extract($values);
  switch ($data['table']) {
    case '1':
    $table = $table1;
    break;
    case '2':
    $table = $table2;
    break;
    case '3':
    $table = $table3;
    break;
  }
  $sql = "SELECT $rows FROM $table WHERE $where;";
  print_r($sql);
  die();
  $stmt = mysqli_stmt_init($conn);
  if (!mysqli_stmt_prepare($stmt, $sql)) {
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
    header("Location: ".$url."?error=sqlerror");
    die();
  } else {
    $amount = str_repeat('s', count($values));
    $values = array_values($values);
    mysqli_stmt_bind_param($stmt, $amount, ...$values);
    mysqli_stmt_execute($stmt);
    $result = mysqli_stmt_get_result($stmt);
    $getResult = mysqli_fetch_assoc($result);
    mysqli_stmt_close($stmt);
    mysqli_close($conn);
    $new = array_push($getResult, 'true');
    return $getResult;
  }
}

所以第一个持有数据库连接,后者暂时有插入、更新和select的动态查询。我想知道我是否应该将这两个文件合并为一个。因为每次我需要连接时,我总是使用我的一个查询,反之亦然?

还有 2 个奖励问题:正如您在我的连接文件中看到的那样,我有我的 table 名字,我在其他文件和函数中使用数字连接数字和名字。 最后我应该使用 PDO,为什么?

一般性地回答您的问题 - 是的,您可以将辅助函数放在建立 sql 连接的同一文件中。

但是,你的实际功能的代码至少是有问题的。或者,说实话,您的函数 selectdb() 对程序员来说是 折磨 ,不应该存储在任何地方 。坚持按原样编写的自然 SQL 查询。您不需要数字来表示 tables。您不需要 $rows 变量。一切都可以直接写在 SQL 字符串中。您所需要的只是一个简单的辅助函数,它可以减少 运行 查询所需的代码量。

这里有一个这样的例子mysqli include file

一旦它包含在您的脚本中,您就可以使用它来 运行 任何 mysql 查询,任何 table 以及任何变量列表。查看以下示例(您可以将以下代码块复制并粘贴到您的文件中,然后 运行 按原样):

<?php
require 'mysqli.php';

#Create a temporary table
$conn->query("CREATE temporary TABLE tmp_mysqli_helper_test
              (id int auto_increment primary key, name varchar(9))");

# populate it with sample data
$sql = "INSERT INTO tmp_mysqli_helper_test (name) VALUES (?),(?),(?)";
$stmt = prepared_query($conn, $sql, ['Sam','Bob','Joe']);
echo "Affected rows: $stmt->affected_rows\n";
echo "Last insert id: $conn->insert_id\n";

# Getting rows in a loop
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id > ?";
$res = prepared_query($conn, $sql, [1])->get_result();
while ($row = $res->fetch_assoc())
{
    echo "{$row['id']}: {$row['name']}\n";
}

# Getting one row
$id  = 1;
$sql = "SELECT * FROM tmp_mysqli_helper_test WHERE id=?";
$row = prepared_query($conn, $sql, [$id])->get_result()->fetch_assoc();
echo "{$row['id']}: {$row['name']}\n";

# Update
$id = 1;
$new = 'Sue';
$sql = "UPDATE tmp_mysqli_helper_test SET name=? WHERE id=?";
$affected_rows = prepared_query($conn, $sql, [$new, $id])->affected_rows;
echo "Affected rows: $affected_rows\n";

# Getting an array of rows
$start = 0;
$limit = 10;
$sql = "SELECT * FROM tmp_mysqli_helper_test LIMIT ?,?";
$all = prepared_query($conn, $sql, [$start, $limit])->get_result()->fetch_all(MYSQLI_ASSOC);
foreach ($all as $row)
{
    echo "{$row['id']}: {$row['name']}\n";
}

正如你所看到的,一个合适的辅助函数可以保持SQL所有的灵活性和可读性,同时减少代码量。