我试图第一次使用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);
}
});
});
我用来访问数据库的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”内所有值的公司名称。这怎么可能?
最佳答案
SQL查询应为
SELECT
company_name
FROM
company_names
WHERE
cik= IN('0001001807','0001001843', '0001001853')
这将返回该列表中带有CIK的所有公司名称。 IN参数接受逗号分隔的值列表。
在传递CIK数组方面,您可以更改Ajax请求以发送CIK的“ data”参数。
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查询一起使用。