0

我继承了一个没有做它应该做的事情的应用程序。我已将问题与未正确附加的数据库隔离开来。程序员编写了这个函数,似乎是为了评估是否附加了数据库,如果没有,则调用“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();
    }

但它显然是。

这里发生了什么?!?!?!?

4

1 回答 1

0

不,不应该,因为在第一个条件下$hasPaymentDatabaseAttached设置为。true仍然是胡说八道,但它的工作原理与描述的一样。

于 2013-02-25T17:41:51.380 回答