PHP db2 bind_param()

时间:2011-08-26 16:08:31

标签: php data-binding db2

为什么必须使用此函数将变量名称指定为字符串值?为什么我不能直接使用变量名?这对我来说似乎很愚蠢。

实施例:     db2_bind_param($ prepared,1,“foo1”);

3 个答案:

答案 0 :(得分:1)

可能它正在做类似的事情:

function db2_bind_param($stmt, $position, $name) {
   global $$name;
   $$name = &$stmt[$position];
}

只是一个猜测,但是......

答案 1 :(得分:1)

正如manual中所述,它是资源所绑定的变量:

bool db2_bind_param(resource $stmt , int $parameter-number , string $variable-name, ...)

这样,你有一个干净的签名,因为它总是返回一个布尔值而没有其他数据类型。其他函数返回false或资源。我相信,该库已经从强类型语言(如c或c ++)移植过来。在这些语言中,您只能在签名中指定一种返回类型 - 例如bool|resource db2_bind_param(...)不起作用。

最后你是对的:在像PHP这样的松散类型的语言中,你不需要它。

答案 2 :(得分:1)

这样,您可以以编程方式绑定一组变量,如

$db_vars = array("foo1","foo2");

for($i=1; $i<=sizeof($db_vars); ++$i)
  db2_bind_param($prepared, $i, $db_vars[$i]);

然后,您可以使用变量变量以编程方式获取值:

foreach($db_vars as $var)
  echo $var,'=',$$var,"\n";

如果预期$variable-name参数本身就是变量,则函数抽象的基本特性会中断,因为您可以传入完全相同的并得到不同的结果:

$foo = 'hello';
db2_bind_param2($prepared, 1, $foo); // feasible, but...

db2_bind_param2($prepared, 1, 'hello'); // should give the same result as above, but what would it be?