我需要从db获取一些货币ID,这是我的代码
$arr = [];
$currency_codes = array("USD", "RUB");
$currency_codes_in = implode(',', array_fill(0, count($currency_codes), '?'));
$query = "SELECT `curr_id` FROM `dictionary_currency` WHERE `curr_code` IN (". $currency_codes_in .")";
$stmt = $db->prepare($query);
foreach ($currency_codes as $k => $id) {
$stmt->bindValue(($k+1), $id);
}
$stmt->execute();
$currencies = $stmt->fetchAll();
foreach($currencies as $currency)
{
foreach($currency as $key => $value)
{
$arr[] = $value;
}
}
print_r($arr);
exit();
这是$currencies
数组
Array
(
[0] => Array
(
[curr_id] => 643
[0] => 643
[curr_code] => RUB
[1] => RUB
)
[1] => Array
(
[curr_id] => 840
[0] => 840
[curr_code] => USD
[1] => USD
)
)
这是$arr
Array
(
[0] => 643
[1] => 643
[2] => 840
[3] => 840
)
我不明白为什么我在数组中得到重复的值以及如何防止它?
答案 0 :(得分:2)
PDO是一个数据库包装器,可以为您做很多事情。例如,
所以实际上你需要的代码比现在少两倍:
$currency_codes = array("USD", "RUB");
$currency_codes_in = implode(',', array_fill(0, count($currency_codes), '?'));
$query = "SELECT `curr_id` FROM `dictionary_currency` WHERE `curr_code` IN ($currency_codes_in)";
$stmt = $db->prepare($query);
$stmt->execute($currency_codes);
$arr = $stmt->fetchAll(PDO::FETCH_COLUMN);
或者我宁愿建议像
那样$query = "SELECT curr_code, curr_id FROM dictionary_currency WHERE `curr_code` IN ($currency_codes_in)";
$stmt = $db->prepare($query);
$stmt->execute($currency_codes);
$arr = $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
答案 1 :(得分:1)
循环存在问题:
foreach($currencies as $currency) {
foreach($currency as $key => $value) {
$arr[] = $value;
}
}
只需使用简单的
即可foreach($currencies as $currency) {
$arr[] = $currency[0];
}
编辑#1:
使用您的$currencies
旧查询,我得到以下内容:
Array
(
[0] => Array
(
[curr_id] => 643
[0] => 643
[curr_code] => RUB
[1] => RUB
)
[1] => Array
(
[curr_id] => 840
[0] => 840
[curr_code] => USD
[1] => USD
)
)
Array
(
[0] => 643
[1] => 643
[2] => RUB
[3] => RUB
[4] => 840
[5] => 840
[6] => USD
[7] => USD
)
答案 2 :(得分:0)
我知道这个问题越来越老了。但是,这是防止PDO重复值的解决方案。 只是使用这个:
$stmt->fetchAll(PDO::FETCH_ASSOC);
代替此:
$stmt->fetchAll();
答案 3 :(得分:-1)
使用以下查询
$ query =" SELECT DISTINCT curr_id
FROM dictionary_currency
WHERE curr_code
IN("。$ currency_codes_in。")";