无脂肪框架php sql语句在表达中



我正在尝试在sql语句中包含在" in"表达式中使用的字符串列表:例如:

select * from poop where id in ('asd','sas','ser')

我想从变量传递IN参数。引用真的让我搞砸了。我应该通过制作一个像这样的逗号分开的字符串来将其传递给我一直试图无济于事的字符串:

282366381A,240506808A,244154247A,491404349A,242443808B,328409296A,239723812A,383423679M

"282366381A","240506808A","244154247A","491404349A","242443808B","328409296A"

'282366381A','240506808A','244154247A','491404349A','242443808B','328409296A'

这些都没有工作,或者使用一系列值有其他方式?

这是我在字符串中使用的语句:

$cernerResults = $this->cernerdb->exec( "select
        pat as HICN,
    from pat
    where
        HICN in ( ? )", $hicsString );

编辑:

我能够通过将整个查询构造为这样的字符串来解决这个问题:

$query = "select pat as HICN from pat where HICN in (".$hicsString.")";

$ hicsstring在每个项目周围都有单个引号:

'282366381A','240506808A','244154247A','491404349A','242443808B','328409296A'

问题在于,将字符串提供给EXEC将不会产生任何结果。当查看freetds日志文件时,表达式值将被两次引用,或者每个都会引用双单,如果我不使用引号,则根本不会引用它们。

所有这些都将使声明返回没有结果。我还应该提到这是一个Sybase数据库。

我认为您的问题可能来自以下事实:PDO解析器需要每个问号一个值,以便它能够验证它。因此,您的"黑客"带有一个问号,分配给一个以上的值是失败的地方。

这就是我处理这样的情况:

$values = ['asd','sas','ser'];
$count = count($values);
$results = $db->exec(
    "select * from poop where id in ( ?".str_repeat(", ?", $count-1).")",
    $values
);

通常,我会建议您使用数据映射器而不是在数据库对象上运行查询。迭代它们更容易,并且更安全。

最新更新