我是否需要声明要在 bind_result() 语句中使用的变量?

Do I need to Declare a Variable to be used in a bind_result() Statement?

当使用bind_result()语句(referenced here)编写prepared语句并绑定结果时,考虑下面的例子,我是否需要声明$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 只是没有意识到这是 'okay' 这一事实,但我想确保我以正确的方式这样做。

它可能不容易理解,但是当你通过引用传递变量时 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

Demo online.

Intelephense 告诉您这些变量未定义可能有几个原因:

  1. 您没有正确指定 mysqli 作为参数类型。检查命名空间或始终使用完全限定名称。
  2. 您拼错了 mysqli 对象变量名。真的$conn1在你当前的范围内吗?
  3. 您使用的是非常旧的 Intelephense 版本。这种情况在很旧的版本中就有问题。检查更新。