【问题标题】:Do I need to Declare a Variable to be used in a bind_result() Statement?我是否需要声明要在 bind_result() 语句中使用的变量?
【发布时间】:2021-11-19 21:05:05
【问题描述】:

在编写准备好的语句并使用bind_result() 语句(referenced here)绑定结果时,考虑下面的示例,我是否需要在语句中绑定之前声明$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 并没有意识到这“没问题”,但我想确保我以正确的方式做这件事。

【问题讨论】:

  • 是的,没关系。在引用参数中使用变量会自动创建它。

标签: php mysqli intelephense


【解决方案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

Demo online.

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

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

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    相关资源
    最近更新 更多