Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tệp PHP không thể nhập một số phần mã

Như đã viết trong nhận xét ở trên, bạn nên chia và chinh phục để cuộc sống của bạn dễ dàng hơn (đặc biệt là khi bạn viết mã trong khi chơi với nó trong chức năng lớn đó). Điều đó hoạt động dễ dàng như:

function file_put($number, $data)
{
    $path = sprintf("C:/temp/wamp/www/file%d.txt", $number);
    file_put_contents($path, $data);
}

ví dụ:đó chỉ là thay thế nhiều dòng trùng lặp mà bạn chỉ cần một tệp (được đánh số) mà bạn đặt một số chuỗi.

Nhưng bạn cũng có thể làm điều này với những thứ phức tạp hơn, chẳng hạn như hoạt động cơ sở dữ liệu. Bạn có thể muốn chuyển phần xử lý lỗi ra khỏi tầm mắt của mình cũng như quan tâm đến việc kết nối với cơ sở dữ liệu khi cần thiết và một cách linh hoạt hơn để tìm nạp dữ liệu. Điều đó có thể được thực hiện bằng cách di chuyển mysql_* (không dùng nữa) chức năng thành một hoặc hai lớp của riêng nó, để nó khuất tầm mắt bạn. Điều đó sẽ làm cho việc sử dụng nó dễ dàng hơn nhiều (mà tôi sẽ trình bày trước):

// Create your database object to use it later on:
$config = array(
    'server' => 'localhost',
    'name' => 'root',
    'password' => '',
    'db' => 'test',
);
$db = new MySql($config);

Tôi đã gọi lớp cơ sở dữ liệu MySql vì nó đại diện cho kết nối mysql và nó hoạt động với phần mở rộng mysql cũ. Bạn chỉ cần chuyển đối tượng cơ sở dữ liệu đó vào hàm trong câu hỏi của bạn. Kết hợp với file_put hàm, nó sẽ giống như thế này:

Kiểm tra chức năng
function checkin(MySql $DB, $TechID, $ClientID, $SiteID)
{
    $query = sprintf("SELECT `Type` FROM `Log` WHERE `TechID` = '%d' ORDER BY LogTime DESC LIMIT 1", $TechID);
    file_put(5, $query);

    $result1 = $DB->query("SELECT COUNT(*) FROM Log");    
    $result2 = $DB->query($query);

    foreach ($result1 as $row1) {
        list($count) = $row1;
        $data = "ClientID:$ClientID TechID:$TechID SiteID:$SiteID Count:$count"
        file_put(3, $data);
        foreach ($result2 as $row2) {
            file_put(4, $data);
        }
    }
}

Vẫn là checkin Hàm gần như lớn (đã có 12 dòng mã), nhưng ngắn hơn nhiều so với phiên bản đầu tiên của bạn vì nó ủy quyền công việc ghi tệp và truy cập cơ sở dữ liệu. Tôi hy vọng cuộc biểu tình này là hữu ích. Sau đây là ví dụ về mã đầy đủ:

/**
 * MySql Exception
 */
class MySqlException extends RuntimeException
{
}

/**
 * MySql Database Class
 */
class MySql
{
    private $server;
    private $name;
    private $password;
    private $db;
    private $connection;

    public function __construct(array $config)
    {
        $this->server = $config['server'];
        $this->name = $config['name'];
        $this->password = $config['password'];
        $this->db = $config['db'];
    }

    private function connect($server, $name, $password)
    {
        $this->connection = mysql_connect($server, $name, $password);
        if (!$this->connection) {
            $this->error("Unable to connect to '%s' as user '%s'", $server, $name);
        }
    }

    private function select($db)
    {
        if (!mysql_select_db($db, $this->connection)) {
            $this->error("Unable to select database '%s'", $db);
        }
    }

    private function close()
    {
        $this->connection && mysql_close($this->connection);
    }

    private function connectSelect()
    {
        $this->connect($this->server, $this->name, $this->password);
        $this->select($this->db);
    }

    /**
     * @param $query
     * @return MySqlResult
     */
    public function query($query)
    {
        $this->connection || $this->connectSelect();
        $result = mysql_query($query, $this->connection);
        if (!$result) {
            $this->error("Unable to execute query '%s'", $query);
        }
        return new MySqlResult($result);
    }

    /**
     * @param string $format
     * @param ...
     * @throws MySqlException
     */
    private function error($format)
    {
        $args = func_get_args();
        array_shift($args);
        $format .= ': %s';
        $args[] = $this->connection ? mysql_error($this->connection) : mysql_error();
        throw new MySqlException(vsprintf($format, $args));
    }

    public function __destruct()
    {
        $this->close();
    }
}

/**
 * MySql Result Set - Array Based
 */
class MySqlResult implements Iterator, Countable
{
    private $result;
    private $index = 0;
    private $current;

    public function __construct($result)
    {
        $this->result = $result;
    }

    public function fetch($result_type = MYSQL_BOTH)
    {
        $this->current = mysql_fetch_array($this->result, $result_type);
        return $this->current;
    }

    /**
     * Return the current element
     * @link http://php.net/manual/en/iterator.current.php
     * @return array
     */
    public function current()
    {
        return $this->current;
    }

    public function next()
    {
        $this->current && $this->fetch();
    }

    /**
     * Return the key of the current element
     * @link http://php.net/manual/en/iterator.key.php
     * @return mixed scalar on success, or null on failure.
     */
    public function key()
    {
        return $this->current ? $this->index : null;
    }

    /**
     * Checks if current position is valid
     * @link http://php.net/manual/en/iterator.valid.php
     * @return boolean The return value will be casted to boolean and then evaluated.
     * Returns true on success or false on failure.
     */
    public function valid()
    {
        return (bool)$this->current;
    }

    /**
     * Rewind the Iterator to the first element
     * @link http://php.net/manual/en/iterator.rewind.php
     * @return void Any returned value is ignored.
     */
    public function rewind()
    {
        $this->fetch();
    }

    /**
     * Count of rows.
     *
     * @link http://php.net/manual/en/countable.count.php
     * @return int The count of rows as an integer.
     */
    public function count()
    {
        return mysql_num_rows($this->result);
    }
}

// Create your database object to use it later on:
$config = array(
    'server' => 'localhost',
    'name' => 'root',
    'password' => '',
    'db' => 'test',
);
$db = new MySql($config);

function file_put($number, $data)
{
    $path = sprintf("C:/temp/wamp/www/file%d.txt", $number);
    file_put_contents($path, $data);
}

function checkin(MySql $DB, $TechID, $ClientID, $SiteID)
{
    $query = sprintf("SELECT `Type` FROM `Log` WHERE `TechID` = '%d' ORDER BY LogTime DESC LIMIT 1", $TechID);
    file_put(5, $query);

    $result1 = $DB->query("SELECT COUNT(*) FROM Log");    
    $result2 = $DB->query($query);

    foreach ($result1 as $row1) {
        list($count) = $row1;
        $data = "ClientID:$ClientID TechID:$TechID SiteID:$SiteID Count:$count";
        file_put(3, $data);
        foreach ($result2 as $row2) {
            file_put(4, $data);
        }
    }
}

checkin($db, 1, 2, 3, 4);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cho phép tất cả các kết nối từ xa, MySQL

  2. Làm cách nào để lấy tất cả các giá trị trong một cột bằng PHP?

  3. Làm cách nào để loại bỏ những nhận xét này trong MySQL dump?

  4. CONVERT_TZ () Ví dụ - MySQL

  5. Nối giữa các bảng trong hai cơ sở dữ liệu khác nhau?