2013-05-01 108 views
0

我试图在implode函数内使用数组运行查询。使用单引号将implode函数中的变量换行

$dosages = implode(" AND CONCAT(prescription,'-',dosage) =",$doses); 
$q=$this->db->query("SELECT account_num 
        FROM ( 
        SELECT account_num, CONCAT(prescription,'-',dosage) as script 
        FROM ci_prescription_history 
        )a 
        WHERE script=".implode(' AND script=',$doses)); 

MySQL在“where子句”中一直说“未知列'Advair'”。我只是想知道是否有可能换用单引号破灭函数内部的变量,因此,当它被解析它所读出这样的

SELECT account_num 
FROM (SELECT account_num, CONCAT(prescription,'-',dosage) as script 
FROM ci_prescription_history 
)a 
WHERE script='Advair-230/21' AND script='Advair-250/50' 
+2

1.不只是错误唱一个单引号? 2.这个'AND'子句永远不会返回任何记录。 – 2013-05-01 19:24:08

+0

你的权利我只是在phpmyadmin中运行这个查询,它没有返回任何东西 – 2013-05-01 19:33:01

回答

1

是的,你需要将引号添加到您的查询和implode(),像这样:

$q=$this->db->query("SELECT account_num 
       FROM ( 
       SELECT account_num, CONCAT(prescription,'-',dosage) as script 
       FROM ci_prescription_history 
       )a 
       WHERE script='" . implode("' AND script ='", $doses)) . "'"; 
+0

好吧,我用你的例子,它删除了错误,但我知道我应该收回两行,但我收到一个空的结果集。我还认为你在WHERE script ='“之后有一个类型。implode(”'AND script ='“,$ doses))。''';我想你想要WHERE script ='“。implode(”'AND script ='“,$ doses)。”'“);但是我可能是错的 – 2013-05-01 19:30:17

+0

如果我选择一个处方,它的效果很好 – 2013-05-01 19:31:38

+0

可能因为你使用'AND'在你的查询中,你应该使用'OR':'WHERE script ='“。 implode(“'OR脚本='”,$剂量))。 “'”;' – nickb 2013-05-01 19:32:25

0

编辑 这里是我做过什么来解决它

foreach ($accounts as $account) { 
    $q=$this->db->query("SELECT account_num 
    FROM ( 
    SELECT account_num, CONCAT(prescription,'-',dosage) as script 
    FROM ci_prescription_history 
    )a 
    WHERE script='".implode("' OR script ='",$doses)."' AND account_num=$account"); 
} 
+0

好吧,也许我太快跳过枪了。在测试完查询后,我意识到它仍然没有给我正确的结果集。我用这个表达式“脚本IN('”。implode(“','”,$剂量)。“')”)“它减少了不应该在那里的数量或行数,显示我应该得到的行也显示几行不应该在那里的行。我不是最好的MySQL人,所以任何帮助表示赞赏。 – 2013-05-01 20:54:36

相关问题