gpt4 book ai didi

php - 用于调试的变量中存储的查询不会显示

转载 作者:行者123 更新时间:2023-11-29 10:32:15 25 4
gpt4 key购买 nike

在我的 PHP MySQL 类中,每次运行查询时,我都会将其存储在公共(public)变量中,以便我可以在脚本末尾打印所有查询,以调试我在每个页面上执行的操作数。并确保他们是我希望他们做的事情。

我的问题是,似乎并非所有查询都显示出来。我认为这是由于我如何使用我的类(class)。

这是类(class)的片段:

class db_mysql extends PDO
{
protected static $instance;

public $stmt;

// the query counter
public $counter = 0;

// store all the queries for debugging
public $debug_queries = '';

public function __construct()
{
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false, // allows LIMIT placeholders
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'
];
parent::__construct("mysql:host=".DB['DB_HOST_NAME'].";dbname=".DB['DB_DATABASE'],DB['DB_USER_NAME'],DB['DB_PASSWORD'], $options);
}

// a classical static method to make it universally available
public static function instance()
{
if (self::$instance === null)
{
self::$instance = new self;
}
return self::$instance;
}

// the most basic query
public function run($sql, $data = NULL)
{
try
{
$this->stmt = $this->prepare($sql);
$this->stmt->execute($data);
$this->debug_queries .= '<pre>' . $this->replaced_query($sql, $data) . '</pre>';
return $this;
}
catch (PDOException $error)
{
$trace = $error->getTrace();
error_log('SQL ERROR ' . $error->getMessage());
die('SQL Error');
}
}

那么在任何其他类中,我都可以这样做:

class test
{
private $dbl;

function __construct()
{
$this->dbl = db_mysql::instance();
$this->dbl->run("some update query");
}

我的问题是,在“test”类中​​完成的任何查询似乎都没有添加到 $debug_queries 中?

最佳答案

事实证明,这是因为当我从另一个类(例如“test”)以静态方式访问它时,它不会将其添加到非静态变量中。

改变

public $debug_queries = '';

public static $debug_queries = '';

随着调整:

$this->debug_queries .= '<pre>' . $this->replaced_query($sql, $data) . '</pre>';

对此:

self::$debug_queries .= '<pre>' . $this->replaced_query($sql, $data) . '</pre>';

已经解决了这个问题,无论它怎么称呼,它们现在都会出现。

关于php - 用于调试的变量中存储的查询不会显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47183457/

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