PHP我有一个数据库连接文件,我应该将数据库查询功能放在同一个文件中

问题描述 投票:0回答:1

为了更好地解释我的问题,我有两个文件: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

和:database-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;
  }
}

因此,前者保持数据库连接,而后者具有针对插入,更新和选择的动态查询。我想知道我是否应该将两个文件合并为一个。因为每次我需要连接时,我总是使用我的一个查询,而在其他方面都使用相同的查询?

还有2个额外的问题:正如您在我的连接文件中看到的,我有我的表名,我在其他文件中使用数字,并且在函数中将数字连接到名称。最后我应该使用PDO吗,为什么?

php database mysqli database-connection
1个回答
1
投票

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

但是,您实际功能的代码至少是值得怀疑的。或者,说实话,您的函数selectdb()对程序员来说是torture,不应存储在[[anywhere中。坚持按原样编写的自然SQL查询。您不需要数字来代表表格。您不需要$ rows变量。一切都可以直接写在SQL字符串中。您需要的只是一个简单的帮助程序功能,该功能将减少运行查询所需的代码量。

这里是此类mysqli include file的示例

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

<?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的所有灵活性和可读性,并同时减少代码量。
© www.soinside.com 2019 - 2024. All rights reserved.