为什么必须使用此函数将变量名称指定为字符串值?为什么我不能直接使用变量名?这对我来说似乎很愚蠢。
实施例: db2_bind_param($ prepared,1,“foo1”);
答案 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?