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

标签 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。显然不应该。

我这里的代码有错误吗?

提前致谢

:edit: 我应该注意,当我输入一个存在于所有连接表中的 ID 时,正确的结果 (json) 会显示在页面上。

最佳答案

我认为问题是即使 ID 在第一个查询中不存在,$query 变量仍然有一个正确的查询,并且没有任何错误。那不是你应该做的 if 测试。
我认为您应该测试 $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 不为假时中断的循环会更整洁。

<?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);

世界是你的牡蛎。

关于php - 在 PHP 中使用 if 语句的备用查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020549/

相关文章:

mysql触发器操作数应包含2列

mysql - 用 MySQL 中的另一个表更新表

php - 未找到 TestCase 的 laravel fatal error

php - 直接从 Controller 运行 sql 查询

php - 使用codeigniter在MySQL中通过foreach保存多个复选框数据

php - 简单的 jquery get 函数不起作用?

php - LAMP/Laravel - 报告生成最大化单个 CPU

php - 配置文件中的MySQL连接错误

PHP MYSQL - 127.0.0.1 和 localhost 之间的区别

php - 更新我的表 PHP/MySQL 时出现问题