1

在编写准备好的语句并使用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 并没有意识到这是“好的”这一事实,但我想确保我以正确的方式做这件事。

4

1 回答 1

1

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

在线演示。

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

  1. 您没有mysqli正确指定为参数类型。检查命名空间或始终使用完全限定名称。
  2. 您拼错了mysqli对象变量名称。它真的$conn1在您当前的范围内吗?
  3. 您使用的是非常旧的 Intelephene 版本。这种情况在非常旧的版本中存在问题。检查更新。
于 2021-09-27T19:31:23.830 回答