0

我正在编写一个带有可变子句的重复出现的 sql 选择。在子句中,我有一个 PHP 变量(应该稍后在 WHILE 中替换。

我的代码:

$custaccount_id_clause = "(SELECT DISTINCT(custaccount_id) AS custaccount_id FROM accountcomms_def_tbl a WHERE subagent_def_id = " . '\'$interest_id\'' . " AND agentorder > (SELECT agentorder FROM accountcomms_def_tbl WHERE subagent_def_id = '$subagent_def_id' and custaccount_id = a.custaccount_id))";

$subagent_def_id 有效,因为它已经定义。

$interest_id 不起作用,因为它没有定义。我稍后在一个 while 循环中尝试用 $interest_id 替换它,在该循环中我将 $custaccount_id_clause 作为 while 循环的一部分调用:

    $allresidual_sql = mysql_query("SELECT SUM(txn_value) as txn_sum, COUNT(DISTINCT(custaccount_id)) AS accounts FROM account_stmnt_tbl WHERE txn_type IN ('Fixed Residual','Variable Residual','One Time Adjustment') AND custaccount_id IN ". $custaccount_id_clause)or die(mysql_error());
  1. 在 $custaccout_id 子句中,我有文本“$interest_id”,我希望 PHP 替换其中的变量。它没有替换变量。

  2. 这是我正在为演示编写的一个快速示例应用程序,请不要告诉我我正在使用哪个 API,因为我不会编写任何投入生产的代码!:)

4

1 回答 1

0

使用您想要使用的第一个变量 ($interest_id) 的一种简单方法是对其进行测试并在其中放置一个 null 而不是以直接方式放置变量,如下所示:

WHERE subagent_def_id = '" . ($interest_id ? $interest_id : null) . "' AND agentorder

这应该可以防止您收到有关未定义的变量/属性的错误。

替换部分让我很感兴趣......你的意思是,在你的结构中的给定点,替换$interest_id为,比方说,$my_other_variable?如果您将整个 SQL 查询建模为字符串,并且根据给定的条件重新编写它,您就可以做到这一点。

像这样的东西可以工作(这只是一个简单的测试,如果你认为合适,可以根据你的需要进行调整):

$query = ($a ? "SELECT * FROM `products` WHERE `price` > '{$a}';" : "SELECT * FROM `products` WHERE `date_added` < '{$b}' AND price > 20;");

如果我正确地理解了你的话。否则,我怀疑您想使用该eval()函数来解析您的编码字符串并让 PHP 按您的意愿处理您的变量。

希望有帮助

于 2013-04-08T09:58:06.547 回答