我继承了一个没有做它应该做的事情的应用程序。我已将问题与未正确附加的数据库隔离开来。程序员编写了这个函数,似乎是为了评估是否附加了数据库,如果没有,则调用“attachPaymentDatabase()”函数来附加它。
function attachPaymentDatabaseIfNotDoneAlready()
{
global $db;
global $hasPaymentDatabaseAttached;
// Determine if we have attached the payment tables, and if not, add them.
$hasPaymentDatabaseAttached = false;
try {
// this new way should work the best-- looking for PAY.
$alldb = queryall($db, "PRAGMA database_list;");
for ($i = 0; $i < count($alldb); $i++)
{
$alldb[$i] = array_change_key_case($alldb[$i], CASE_LOWER);
if (strtolower($alldb[$i]['name']) == 'pay')
{
debugEmail("condition 1 worked.");
$hasPaymentDatabaseAttached = true;
break;
}
}
// if its name changed this will also work
if (!$hasPaymentDatabaseAttached)
{
$r = @$db->querySingle("SELECT * FROM PAY_PARAMETER;");
$hasPaymentDatabaseAttached = true;
debugEmail("condition 2 worked.");
}
}
catch(Exception $e)
{
}
if (!$hasPaymentDatabaseAttached)
{
debugEmail("nothing worked.");
attachPaymentDatabase();
}
}
我编写了一个 debugEmail() 函数,该函数通过电子邮件向我发送带有上述时间戳的已定义消息。从应用程序执行代码时,我可以看到“条件 2 有效”。在“没有任何效果。”前一秒被调用。
我不明白这怎么可能。如果 debugEmail("条件 2 有效。"); 正在执行,那么也应该如此 $hasPaymentDatabaseAttached = true; 在这种情况下不应该执行:
if (!$hasPaymentDatabaseAttached)
{
debugEmail("nothing worked.");
attachPaymentDatabase();
}
但它显然是。
这里发生了什么?!?!?!?