PHP数组作为存储过程的输入

时间:2011-08-11 09:13:26

标签: php mysql arrays stored-procedures

这就是我现在正在做的事情: - 在PHP中

foreach($array as $value)
{
$query = select abc from tblname where colname =" .$value.
// fire query
}

然后我创建这些值的数组并相应地显示。

问题: -

我已经应用了foreach,每次遇到数组中的值时都会触发查询。 结果,如果我的数组中有10个值,则会触发10个查询。并使用网络10次,结果输出缓慢。

我想要什么 -

我想将数组赋给一个存储过程,该存储过程将给出一个结果集,该结果集的输出对应于数组中的所有元素。

我知道这可以做但不知道怎么做。 mysql不会将数组作为数据类型。

结果应该是网络只能使用一次,而不是数组中任意数量的值。

LIKE -

StoredProcedure(inputMysqlARRAY)   // not possible, need a workaroung
{
// fire simple select(same) query for each value.
}

然后从PHP和输入数组调用此存储过程。 //需要解决方法。

1 个答案:

答案 0 :(得分:1)

你必须更聪明地对待你的电话。例如,保持缓存的DB对象和那种东西。

在不了解您的代码的情况下(您的问题相当严重),似乎您的查询是这样的:

$query = "select abc from tblname where colname =" .$value; // run 10 times.

你真的只需编写更智能的代码:

$values = array(); // Now, populate this array.  
                   // When you're done, run the query:
$query = 'select abc from tblname where colname IN (\''.implode('\',\'', $values).'\')';

通常,我们将其称为动态SQL,并且是当今通常如何完成工作的基础。存储过程(或者,基于我如何阅读您的问题,存储函数)有时很有用,但有点过时,作为与SQL接口的一阶方法。数据库人员有时候仍然会发誓,但我认为即使他们的共识相当明确,更智能的查询总是更好。