首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用函数从SQL查询中为Array赋值

如何使用函数从SQL查询中为Array赋值
EN

Stack Overflow用户
提问于 2016-05-02 22:46:51
回答 1查看 46关注 0票数 0

我在创建一个PHP函数时遇到了一些问题,该函数可以根据SQL查询的结果为多维关联数组分配值。

我已经搜索过关于这个主题的其他一些问题,但我无法知道答案是否适用于我。我的问题似乎比其他问题要简单得多。我不知道如何用单词来解释它,所以我将尝试通过代码来解释。

假设我有一个数据库,其中有几个表格,其中包含了关于不同品种的狗的各种信息。高度、重量、颜色等。50+列值信息。我想根据不同的搜索标准从这个数据库中提取5个特定的品种,但是我想将所有相同的列分配给数组变量。因此,我不想一遍又一遍地重复这些长的while循环,而是创建一个函数来为我分配这些变量。

示例

代码语言:javascript
复制
$sql1 -> //Query for German Shepherd info
$sql2 -> // Query for Golden Retriever info
$sql3 -> // Query for Poodle info
$sql4 -> //Query for Pit Bull info
$sql5 -> // Query for Bulldog info

$dogs = array(array()); // set up 2 level multi-array

通过不同的while循环分配值,并一遍又一遍地重复所有列,这是一条很长的路(虽然它是多余的)。

代码语言:javascript
复制
while ($rows = $sql1->fetch(PDO::FETCH_ASSOC)){
$dogs[1]['breed_name'] = $rows['breed_name'];
$dogs[1]['height'] = $rows['height'];
$dogs[1]['weight'] = $rows['weight'];
$dogs[1]['country'] = $rows['country'];
$dogs[1]['function'] = $rows['function'];
etc .. etc .. etc..
}
while ($rows = $sql2->fetch(PDO::FETCH_ASSOC)){
$dogs[2]['breed_name'] = $rows['breed_name'];
$dogs[2]['height'] = $rows['height'];
$dogs[2]['weight'] = $rows['weight'];
$dogs[2]['country'] = $rows['country'];
$dogs[2]['function'] = $rows['function'];
etc .. etc .. etc..
}
while ($rows = $sql3->fetch(PDO::FETCH_ASSOC)){
$dogs[3]['breed_name'] = $rows['breed_name'];
$dogs[3]['height'] = $rows['height'];
$dogs[3]['weight'] = $rows['weight'];
$dogs[3]['country'] = $rows['country'];
$dogs[3]['function'] = $rows['function'];
etc .. etc .. etc..
}

我宁愿只写一个函数,我可以为每个品种的需要调用。然后,我可以将函数存储在一个外部函数页上,该页面包含在我正在处理的任何页面中。这样可以节省空间和精力。但我不知道是如何做到这一点的。这看起来应该很简单,但我好像遗漏了什么。

到目前为止,我已经尝试了两种不同的方法,但都没有产生任何结果。

尝试1

代码语言:javascript
复制
//set up the function
function setDog($dogs, $d) {
$dogs[$d]['breed_name'] = $rows['breed_name'];
$dogs[$d]['height'] = $rows['height'];
$dogs[$d]['weight'] = $rows['weight'];
$dogs[$d]['country'] = $rows['country'];
$dogs[$d]['function'] = $rows['function'];
etc .. etc .. etc..
} 

//call the function
while ($rows = $sql1->fetch(PDO::FETCH_ASSOC){setDog($dogs, 1);}
while ($rows = $sql2->fetch(PDO::FETCH_ASSOC){setDog($dogs, 2);}
while ($rows = $sql3->fetch(PDO::FETCH_ASSOC){setDog($dogs, 3);}
while ($rows = $sql4->fetch(PDO::FETCH_ASSOC){setDog($dogs, 4);}
while ($rows = $sql5->fetch(PDO::FETCH_ASSOC){setDog($dogs, 5);}

但是这不起作用(没有分配给数组的值),所以我试着切换它

尝试2

代码语言:javascript
复制
//set the function
function setDog($dogs, $d, $sql){

while ($rows = $sql->fetch(PDO::FETCH_ASSOC)){
$dogs[$d]['breed_name'] = $rows['breed_name'];
$dogs[$d]['height'] = $rows['height'];
$dogs[$d]['weight'] = $rows['weight'];
$dogs[$d]['country'] = $rows['country'];
$dogs[$d]['function'] = $rows['function'];
etc .. etc .. etc..
}

}

//call the function
setDog($dogs, 1, $sql1);
setDog($dogs, 2, $sql2);
setDog($dogs, 3, $sql3);
setDog($dogs, 4, $sql4);
setDog($dogs, 5, $sql5);

第二个似乎最有可能起作用,但它仍然没有在我的数组中设置任何值。我通过调用随机数组变量(身高、国家、breed_name)进行检查,它们都是空的。

代码语言:javascript
复制
echo $dogs[1]['breed_name'];

我觉得这样,或者类似的事情,应该是可能的。这个概念看起来很简单,但我一定是遗漏了什么。有人能帮我弄清楚吗?

编辑!!

我第一次搞砸了我的榜样。它应该包含$d参数,但我只是复制和粘贴了一堆错误的代码。现在应该修好了。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36992809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档