【问题标题】:Error with custom PHP function: no variable being returned自定义 PHP 函数出错:没有返回变量
【发布时间】:2014-05-16 04:27:45
【问题描述】:

好的,下面看看我的 PHP 函数。我可以确认我已连接到数据库,因为我可以直接在文件中使用 mysqli_query 函数对其进行更新。

<?php
function username_from_id($id) {
$id = mysqli_real_escape_string($id);
$query = mysqli_query($d,"SELECT `username` FROM `users` WHERE `id` = '$id'");
$result = mysqli_fetch_array($query);
$res = $result['username'];
return $res;
}
?>

该函数的目的是选择用户的用户名,如果他们的 ID 等于输入查询的内容,然后返回它。在文件中是这样的

<?php
include 'file_where_function_is.php';
$id = '1';
echo username_from_id($id);
?>

什么都没有出现。有什么想法吗?

【问题讨论】:

  • $d 从未在 username_from_id 中定义
  • 如果您还没有这样做,请将错误报告添加到文件顶部 error_reporting(E_ALL); ini_set('display_errors', 1); mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
  • $d 如果被引用,仍应被纳入函数范围。必须在函数开头使用global 关键字将其传递给函数或从全局范围内检索。
  • 有两件事可以做:1)将$d作为函数参数传递2)省略$dmysqli_query()将使用最后使用的连接(我找到了一个很好的例子PHP 中的 OOP 失败)更新:实际上它必须进行检查,因为文档描述了 mysql_query() 的行为,但没有类似 mysqli_query() 的行为。
  • 他“可以直接在文件中使用 mysqli_query 函数对其进行更新”,这可能意味着他正在连接到初始化 $d 的数据库后立即进行测试。他的功能没听说过$d

标签: php mysqli


【解决方案1】:

正如 cmets 中所指出的,这是一个范围界定问题。您的$d 变量(mysqli 实例)不在username_from_id 的范围内。以下是解决方法...

function username_from_id(mysqli $d, $id) {
    if (!$stmt = $d->prepare('SELECT username FROM users WHERE id = ? LIMIT 1')) {
        throw new Exception($d->error, $d->errno);
    }
    $stmt->bind_param('i', $id);

    if (!$stmt->execute()) {
        throw new Exception($stmt->error, $stmt->errno);
    }

    $stmt->bind_result($username);

    if ($stmt->fetch()) {
        return $username;
    }
    return null;
}

这样称呼它

include 'file_where_function_is.php';
$id = 1;
echo username_from_id($d, $id); // assuming $d exists in this scope

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 2014-06-26
    相关资源
    最近更新 更多