php 我需要声明一个变量来在bind_result()语句中使用吗?

xriantvc  于 2023-01-08  发布在  PHP
关注(0)|答案(1)|浏览(111)

当编写预准备语句并使用bind_result()语句绑定结果时(此处引用),考虑下面的示例,在语句中绑定之前,我是否需要声明$a$b$c

$a = ""; //does this declaration need to happen?

$stmtGetData = $conn1->prepare("SELECT a, b, c FROM myTable");
$stmtGetData->execute();
$stmtGetData->bind_result($a, $b, $c);
$stmtGetData->fetch();
$stmtGetData->close();

无论变量是否在bind_result()之前声明,代码似乎都可以正常工作。虽然上面引用的PHP文档没有显示声明的变量,但如果没有,Intelephense会显示Undefined variable异常。
我的印象是,Intelephense只是没有意识到这是“好的”,但我想确保我这样做是正确的方式。

zte4gxcn

zte4gxcn1#

这可能不容易理解,但是当你通过引用bind_result()传递变量时,你实际上是在定义它们,你不需要事先声明它们。
你可以很容易地检验这个假设:

function test(mysqli $conn1){
    $a = ""; //does this declaration need to happen?

    $stmtGetData = $conn1->prepare("SELECT 1,2,3");
    $stmtGetData->execute();
    $stmtGetData->bind_result($a, $b, $c);

    var_dump($a, $b, $c);
}

test($mysqli);
// Outputs the following with no warnings about undefined variables
// string(0) ""
// NULL
// NULL

如果变量$b$c未定义,则在尝试使用var_dump时会出现get a warning
Demo online.
Intelephense告诉你这些变量是未定义的可能有几个原因:
1.未正确指定mysqli作为参数类型。请检查命名空间或始终使用完全限定名。
1.您拼错了mysqli对象变量名。它确实在当前作用域中吗?
1.您使用的是非常旧的Intelephense版本。在非常旧的版本中出现了此情况。请检查更新。

相关问题