在PHP中使用if语句的备用查询

时间:2015-05-03 23:27:09

标签: php mysql

我正在尝试运行备用查询,如果初始查询失败(因为我在这个实例中搜索的id仅存在于正在连接的其中一个数据库中)使用if语句并且我是这样构建的:

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/php/link_costreport_2013.php');
$id = $_GET['id']; //ID # For page/query
if($query = $link->prepare("SELECT locale.id, locale.provider_num, locale.provider_name, locale.state, locale.city,
                        finstat_ca.coh_and_banks, finstat_ca.temp_investments, finstat_ca.notes_receivable, finstat_ca.accounts_receivable, finstat_ca.other_receivables,
                        finstat_ca.afun_and_ar, finstat_ca.inventory, finstat_ca.prepaid_expenses, (finstat_ca.other_cur_assets + finstat_ca.due_from_other_funds) as other_cur_assets, finstat_ca.total_current_assets,
                        finstat_fa.total_fixed_assets,
                        finstat_olta.investments, (finstat_olta.dep_on_leases + finstat_olta.due_from_owners_officers + finstat_olta.other_assets) as all_olta, finstat_olta.total_other_assets, finstat_olta.end_assets,
                        finstat_cl.accounts_payable, finstat_cl.salaries_wages_fees_payable, finstat_cl.payroll_taxes_payable, finstat_cl.notes_loans_payable, finstat_cl.deferred_income, finstat_cl.total_current_liabilities,
                        (finstat_cl.total_current_liabilities - (finstat_cl.accounts_payable + finstat_cl.salaries_wages_fees_payable + finstat_cl.payroll_taxes_payable + finstat_cl.notes_loans_payable + finstat_cl.deferred_income)) as all_other_cl,
                        finstat_ltl.mortgage_payable, finstat_ltl.notes_payable, finstat_ltl.unsecured_loans, finstat_ltl.other_long_term_liabilities, finstat_ltl.total_long_term_liabilities,
                        finstat_talfb.total_fund_balance, finstat_talfb.total_lia_plus_fb
                        FROM `locale`
                        INNER JOIN `finstat_ca`
                        ON locale.id = finstat_ca.id
                        INNER JOIN `finstat_fa`
                        ON locale.id = finstat_fa.id
                        INNER JOIN `finstat_olta`
                        ON locale.id = finstat_olta.id
                        INNER JOIN `finstat_cl`
                        ON locale.id = finstat_cl.id
                        INNER JOIN `finstat_ltl`
                        ON locale.id = finstat_ltl.id
                        INNER JOIN `finstat_talfb`
                        ON locale.id = finstat_talfb.id
                        WHERE locale.id = :id
                        LIMIT 1")){

} else {
$query = $link->prepare("SELECT id, provider_num, provider_name, state, city
                        FROM `locale`
                        WHERE id = :id
                        LIMIT 1");
}
$query->bindParam(':id', $id);
$query->execute();
$results = $query->fetch(PDO::FETCH_ASSOC);

echo json_encode($results);

基本上,它默认为ID存在的单个表,并且只提取几个字段而不是上面的大语句。我唯一的问题是我的代码不起作用。当我回应它时,我的JSON只说false。显然不应该这样。

我的代码中是否有错误?

提前致谢

:编辑:我应该注意,当我输入所有加入的表中存在的ID时,页面上会显示正确的结果(json)。

1 个答案:

答案 0 :(得分:2)

我认为问题是即使第一个查询中不存在ID,$ query变量仍然有一个正确的查询,并且没有任何错误。如果测试,那不是你应该做的 我认为你应该测试$ results。

这显示了逻辑。

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/php/link_costreport_2013.php');
//ID # For page/query
$id = $_GET['id'];

$sql_1 = "SQL CODE FOR QUERY 1";
$sql_2 = "SQL CODE FOR QUERY 2";

$query = $link->prepare($sql_1);
$query->bindParam(':id', $id);
$query->execute();
$results = $query->fetch(PDO::FETCH_ASSOC);

if (!$results)
{
    $query = $link->prepare($sql_2);
    $query->bindParam(':id', $id);
    $query->execute();
    $results = $query->fetch(PDO::FETCH_ASSOC);
}

echo json_encode($results);

然而,正如您所看到的,在if语句中重复了几行代码,这些代码与if语句之前的代码非常相似。也许有一个循环循环两次,但如果$ results不是false则会爆发整齐。

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/php/link_costreport_2013.php');
//ID # For page/query
$id = $_GET['id'];

$sql[] = "SQL CODE FOR QUERY 1";
$sql[] = "SQL CODE FOR QUERY 2";

foreach ($sql as $sql_query)
{
    $query = $link->prepare($sql_query);
    $query->bindParam(':id', $id);
    $query->execute();
    $results = $query->fetch(PDO::FETCH_ASSOC);
    if ($results)
    {
        break;
    }
}

echo json_encode($results);

世界是你的牡蛎。