我有一个PHP类来处理数据并将其存储在MySQL数据库中.我在保存数据时出于安全原因通过PDO使用预准备语句,但由于类很大,这些预处理语句是在对象生命周期内被调用数千次的不同函数内创建的(从1分钟到30分钟).
我想知道的是,如果有任何原因我无法在类构造函数中准备语句并将句柄保存在成员变量中以避免语句被多次准备.
有什么理由不行吗?我不明白为什么不这样做,但我以前从未见过它,这让我想知道出于某种原因这样做是不是很糟糕.
IE是这样的:
Class MyClass {
private stmt1;
function __construct($dbh) {
$this->stmt1 = $dbh->prepare('SELECT foo FROM bar WHERE foobar = :foobar');
}
private function doFoo() {
$this->stmt1->execute(...)
...
}
}
Run Code Online (Sandbox Code Playgroud) 我的代码看起来像这样:
// Connect to SQLite DB
DB('/path/to/sqlite.db');
DB('BEGIN TRANSACTION;');
// These loops are just examples.
for ($i = 1; $i <= 10000; $i++)
{
for ($j = 1; $j <= 100; $j++)
{
DB('INSERT INTO "test" ("id", "name") VALUES (?, ?);', $i, 'Testing ' . $j);
}
}
DB('END TRANSACTION;');
Run Code Online (Sandbox Code Playgroud)
这是DB()函数:
function DB($query)
{
static $db = null;
if (is_file($query) === true)
{
$db = new PDO('sqlite:' . $query, null, null, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
}
else if (is_a($db, 'PDO') === …Run Code Online (Sandbox Code Playgroud)