gpt4 book ai didi

php - 我是否需要为每个查询实例化 Php 数据库类?

转载 作者:行者123 更新时间:2023-11-30 23:52:43 25 4
gpt4 key购买 nike

我有一个 php 数据库类来管理我所有的数据库查询:

    class DatabaseConnection() 
{
private $link;
public $filter;

public function log_db_errors( $error, $query )
{

if( MY_DEBUG )
{
echo $message;
}
}


public function __construct()
{
global $connection;
mb_internal_encoding( 'UTF-8' );
mb_regex_encoding( 'UTF-8' );
$this->link = new mysqli( MY_HOST, MY_USER, MY_PASS, MY_DB );
$this->link->set_charset( "utf8" );

if( $this->link->connect_errno )
{
$this->log_db_errors( "Connect failed", $this->link->connect_error );
echo 'Server error. Please try again sometime. DB';
exit();
}
}

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

public function filter( $data )
{
if( !is_array( $data ) )
{
$data = trim( htmlentities( $data ) );
$data = $this->link->real_escape_string( $data );
}
else
{
$data = array_map( array( 'DB', 'filter' ), $data );
}
return $data;
}

public function query( $query )
{
$full_query = $this->link->query( $query );
if( $this->link->error )
{
$this->log_db_errors( $this->link->error, $query );
$full_query->free();
return false;
}
else
{
$full_query->free();
return true;
}
}

public function my_table_exists_create( $table, $variables = array() ) {
$check = $this->link->query("SELECT * FROM '$table' LIMIT 1");
if( $check ) return true;
else {
if( empty( $variables ) ) {
return false;
exit;
}

$sql = "CREATE TABLE IF NOT EXISTS ". $table;
$fields = array();
$values = array();
foreach( $variables as $field ) {
$fields[] = $field; //$values[] = "'".$value."'";
}
$fields = ' (' . implode(', ', $fields) . ')';
$sql .= $fields;
$query = $this->link->query( $sql );

if( $this->link->error ) {
$this->log_db_errors( $this->link->error, $sql );
return false;
}
else return true;
}
}

public function my_num_rows( $query )
{
$num_rows = $this->link->query( $query );
if( $this->link->error )
{
$this->log_db_errors( $this->link->error, $query );
return $this->link->error;
}
else
{
return $num_rows->num_rows;
}
}

public function exists( $table = '', $check_val = '', $params = array() )
{
if( empty($table) || empty($check_val) || empty($params) )
{
return false;
exit;
}
$check = array();
foreach( $params as $field => $value )
{

if( !empty( $field ) && !empty( $value ) )
{
if( $this->db_common( $value ) )
{
$check[] = "$field = $value";
}
else
{
$check[] = "$field = '$value'";
}
}

}
$check = implode(' AND ', $check);

$rs_check = "SELECT $check_val FROM ".$table." WHERE $check";
$number = $this->my_num_rows( $rs_check );
if( $number === 0 )
{
return false;
}
else
{
return true;
}
exit;
}


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

}

我使用这个类来管理我所有的查询,比如插入数据库:

    $database = new DatabaseConnection();   
$Item_Details = array(
'item_title' => trim($_POST['title']),
'item_content' => trim($_POST['content']),
'item_updated' => date('Y-m-d H:i:s'),
'item_updatedby' => $my_loginid,
);
$where_clause = array('itemid' => $itemid);
$updated = $database->as_update( 'my_item', $Item_Details , $where_clause, 1 );

现在我需要知道我可以在没有大量连接的情况下使用此类,这些连接会减慢与服务器的连接速度,从而导致超时和连接过多。我以为我可以使用全局变量

function my_constant_initialize()
{
global $databasecon;
$databasecon = new DatabaseConnection();
return $databasecon;
}

所以请指教如何避免过多的连接。还要告诉我是否有必要为每个查询实例化数据库类,或者我可以只调用一次,因为我在我的 php 代码中使用了很多 Include 和 require 函数。

最佳答案

在 OOP PHP 中很难达到 MySQL 数据库连接限制,因为如果脚本完成,它会破坏连接对象。为了安全起见,在你的类中有一个 destruct 函数并在脚本末尾取消设置对象。如果您真的担心达到连接上限,您可以进入 MySQL 并将 max_connection_limit 从我认为的 1000 修改为更高并增加缓冲池。

此外,您可能会考虑将语言转换为 Java,它具有一种称为“连接池”的技术。比 PHP 的版本更好用。不,这与 p_connect 或 PHP 中的任何内容不同。

关于php - 我是否需要为每个查询实例化 Php 数据库类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com