未定义的变量,但存在并且可以';找不到mysqli代码


Undefined variable but exists and can't find mysqli code

我在尝试使我的代码更安全后得到了这些错误:

注意:未定义的变量:db in/第10行上的init.php

警告:mysqli_real_escape_string((要求参数1为mysqli,在中给定null/第10行上的init.php

注意:未定义的变量:db in/第10行上的init.php

警告:mysqli_real_escape_string((要求参数1为mysqli,在中给定null/第10行上的init.php

这是我使用的代码:

require 'database/connection.php';
error_reporting(E_ALL);
ini_set('display_errors',1);
session_start();
function makeSafe($safe)
{
    $safe = mysqli_real_escape_string($db, $safe);
    return $safe;
}

$db变量是在connection.php中定义的,所以它应该正常工作吗?出于某种原因,它无法识别我在connection.php 中使用的mysqli

$host = '...';
$username = '...';
$password = '...';
$dbnaam = '...';
$db_error1 = '...';
$db_error2 = '...';
// Verbinden met Databaseserver
$db=mysqli_connect($host, $username, $password, $dbnaam) or die($db_error1);
// Verbinden met Database
mysqli_select_db($db, $dbnaam) or die($db_error2);

这对我来说一直都很好。所以我不明白我在这里做错了什么。非常感谢您的帮助。

变量范围问题。试试这个:
function makeSafe($safe)
{
    global $db;
    $safe = mysqli_real_escape_string($db, $safe);
    return $safe;
}
function makeSafe($safe)
{
    global $db;
    $safe = mysqli_real_escape_string($db, $safe);
    return $safe;
}

function makeSafe($db,$safe)
{
    $safe = mysqli_real_escape_string($db, $safe);
    return $safe;
}

一个好的方法可能是这样的:

外部文件

<?php
$host = '...';
$username = '...';
$password = '...';
$dbnaam = '...';
$db_error1 = '...';
$db_error2 = '...';
// Verbinden met Databaseserver
$db=mysqli_connect($host, $username, $password, $dbnaam) or die($db_error1);
// Verbinden met Database
mysqli_select_db($db, $dbnaam) or die($db_error2);
return $db;

主文件:

<?php
$db = require('database/connection.php');
... the rest of the code ...

请注意,要在函数中使用$db,必须使用global关键字。