【问题标题】:PHP SQL Code Optimization [closed]PHP SQL代码优化[关闭]
【发布时间】:2016-11-04 20:01:30
【问题描述】:

我正在学习面向对象的 PHP。现在我的任务是建立联系。我想展示我的代码并要求您提供一些优化支持。也许有几个绝对错误的理解的事情。我不希望如此。我想改进我的设计。实际上,常量当然具有权利值。十分感谢! :)

// index.php

<?php
require( dirname( __FILE__ ) . '/config.php' );
new db(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
?>

// config.php

<?php
define('DB_HOST', 'host');
define('DB_USER', 'user');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'database');

if (!defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

require_once(ABSPATH . '/includes/classes/db.class.php');
?>

// db.class.php

<?php
class db
{
    protected $db_host;
    protected $db_user;
    protected $db_password;
    protected $db_name;

    function __construct($dbHost, $dbUser, $dbPassword, $dbName)
    {
        global $mysqli;

        $this -> db_host       = $dbHost;
        $this -> db_user       = $dbUser;
        $this -> db_password   = $dbPassword;
        $this -> db_name       = $dbName;

        $this -> mysqli = new mysqli($this -> db_host, $this -> db_user, $this -> db_password, $this -> db_name);
        $mysqli = $this -> mysqli;
    }
}
?>

【问题讨论】:

  • 您不应该在完全破坏封装的方法中使用全局变量
  • 这是代码审查的东西......
  • 我投票决定将此问题作为离题结束,因为没有具体问题并且属于代码审查网站。
  • @Eiko 如果没有实际的编程问题/问题,请投票关闭“太宽泛”或“不清楚”。话虽如此,如果代码正常运行,它将成为 Code Review 的主题。

标签: php mysql sql oop


【解决方案1】:

以下是我发现的一些提示,在 DB 层上

将连接定义为静态变量,避免连接不止一次

static $connection;

尝试连接数据库,如果尚未建立连接,则只创建一次连接

if(!isset($connection)) {
     // Load configuration as an array. Use the actual location of your configuration file
    $config = parse_ini_file('../config.ini'); 
    $connection = mysqli_connect('localhost',$config['username'],$config['password'],$config['dbname']);
}

如果连接不成功,处理错误

if($connection === false) {
    // Handle error - notify administrator, log to a file, show an error screen, etc.
    return mysqli_connect_error(); 
}

终于返回连接

return $connection;

更多信息:https://www.binpress.com/tutorial/using-php-with-mysql-the-right-way/17

【讨论】:

    【解决方案2】:

    看起来你有很好的基本了解。至于数据库凭据的配置和硬编码,您可以学习更好的安全实践。

    您可以创建一个“.conf.ini”文件并将其存储在包含以下内容的 Web 目录之外。这样做可以阻止硬编码的数据库凭据显示在 Web 根目录和“.”中。如果我没记错的话,在“conf”前面加上前缀将确保它首先得到处理。以下文件既可以作为 php 文件,也可以作为 .ini 文件。

    ;<?php
    ;die();
    
    ;/*
    [General_Database_Settings]
    SERVER_ADDRESS = server
    DATABASE_NAME = database_name
    TABLE = table_name
    DATABASE_USERNAME = db_username
    DATABASE_PASSWORD = db_password
    
    ;*/
    ;?>
    

    这将允许您解析使用中的设置:

    $config = parse_ini_file('/.conf.ini');
    

    然后您可以轻松访问配置文件中的变量:

    $server_address = $config['SERVER_ADDRESS'];
    $database_name = $config['DATABASE_NAME'];
    $username = $config['DATABASE_USERNAME'];
    $password = $config['DATABASE_PASSWORD'];
    

    将它与此处PDO Manual 中的 PDO(PHP 数据对象)结合使用将极大地促进您理解 php 中的面向对象编程以及建立安全的数据库连接。

    我也在做同样的事情,阅读这篇文章帮助我通过更好的生产实践更快地学习一切。 (例如使用准备好的语句防止 SQL 注入。)

    【讨论】:

    • 感谢您的链接和您的做法。我会研究它们:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2011-11-03
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多