Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义PHP函数出错:未返回任何变量_Php_Mysqli - Fatal编程技术网

自定义PHP函数出错:未返回任何变量

自定义PHP函数出错:未返回任何变量,php,mysqli,Php,Mysqli,好的,下面看一下我的PHP函数。我可以确认我已连接到数据库,因为我可以直接在文件中使用mysqli_查询功能对其进行更新 <?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($

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

<?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;
}
?>

正如评论中指出的,这是一个范围问题。您的
$d
变量(
mysqli
实例)不在
username\u from\u 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;
}
这样称呼它

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

$d从未在用户名\u中定义,从\u idAdd错误报告到文件顶部的
错误报告(E\u ALL);ini设置(“显示错误”,1);mysqli_报告(mysqli_报告错误| mysqli_报告严格)如果您还没有这样做。如果引用$d,则仍应将其带入函数的范围。必须使用
global
关键字将其传递到函数中或从函数开头的全局范围中检索。可以做两件事:1)将
$d
作为函数参数传递;2)省略
$d
,并且
mysqli\u query()
将使用上次使用的连接(我发现PHP中OOP失败的一个很好的例子)更新:实际上它必须被检查,因为文档描述了
mysql\u query()
的这种行为,但是
mysqli\u query()
没有类似的行为。他“可以直接在文件中使用mysqli\u查询函数对其进行更新”这可能意味着他在连接到数据库之后就开始测试,其中$d被初始化。他的函数从未听说过
$d