通过postgres中的单个查询访问一组值

时间:2012-06-18 04:52:21

标签: php javascript ajax postgresql

我第一次尝试使用postgres ..我想从名为testArray的数组中的值中检索值公司名称

我写的ajax请求是

$(document).ready(function()
{

var testArray=[0001001871, 0001001843, 0001001853];



        $.ajax({
        type:'GET',
        url: 'php/databaseAccess.php',
        data: {'CIKs': testArray},
        success: function(success)
            {
            document.write(success);
            }



    });
 });

和我用来访问db的PHP文件是

<?php
 $link = pg_connect("host=hostname dbname=dbNAme user=username password=password");
 if(!$link)
 {
 //echo "Connection cannot be established";
 exit;
  }

 else
 {
 $cik_array = $_GET['CIKs'];
 $safe_ciks = array();
 foreach($cik_array as $cik)
 {
$safe_ciks[] = pg_escape_string($cik);
}
$in_string = "'" . implode("','", $safe_ciks) . "'";

 $result = pg_exec($link, "select company_name from company_names where cik=".$in_string);

 if (!$result) {
 //echo "<br> Could not successfully run query from DB";
exit;
}

else
{
 echo "<br> Query Executed Successfully<br>";

 echo pg_result($result, 0);
 }
 }
 ?>

此代码只输出cik 0001001807的公司名称,我希望通过单个查询本身获取数组“testArray”中所有值的公司名称。这怎么可能?

1 个答案:

答案 0 :(得分:2)

SQL查询应该是

SELECT 
    company_name
FROM
    company_names
WHERE
    cik= IN('0001001807','0001001843', '0001001853')

这将返回该列表中包含CIK的所有公司名称。 IN参数接受以逗号分隔的值列表。

在传递CIK数组方面,您可以更改Ajax请求的“data”参数以发送CIK。

        data: {'CIKs': testArray},

我相信我会将所有CIK传递给databaseAccess.php,然后可以通过以下命令访问

$cik_array = $_GET['CIKs'];
//escape the CIKs, to prevent SQL injection
$safe_ciks = array();
foreach($cik_array as $cik)
{
    $safe_ciks[] = pg_escape_string($cik);
}
//get the CIKs in a format compatible with the IN function
$in_string = "'" . implode("','", $safe_ciks) . "'";

这将产生$ in_string,它可以与上面的SQL查询一起使用。