将旧的mysql函数转换为使用mysqli扩展 客户端站点的登录功能与我提供的可视化更新不兼容。网站的很大一部分也运行在过时的php上,所以我正在更新它。

将旧的mysql函数转换为使用mysqli扩展 客户端站点的登录功能与我提供的可视化更新不兼容。网站的很大一部分也运行在过时的php上,所以我正在更新它。,php,mysql,mysqli,Php,Mysql,Mysqli,我目前正在该网站的问答部分工作 如果用户未登录,index.php强制重定向到login.php;login.php引用一个名为define.mysqli.php的配置文件,该文件建立到数据库的连接,同时还需要一个func.php文件,该文件包含大量函数,如getQuestions()和getUserInfoById();连接正常,但由于诸如mysqli_real_escape_string()之类的错误,站点本身的功能无法工作:无法在login.php中获取mysqli(错误1),func.p

我目前正在该网站的问答部分工作

如果用户未登录,index.php强制重定向到login.php;login.php引用一个名为define.mysqli.php的配置文件,该文件建立到数据库的连接,同时还需要一个func.php文件,该文件包含大量函数,如getQuestions()和getUserInfoById();连接正常,但由于诸如mysqli_real_escape_string()之类的错误,站点本身的功能无法工作:无法在login.php中获取mysqli(错误1),func.php文件中存在未定义的变量(错误2),mysqli_query()希望参数1为mysqli,func.php中给出null(错误3)

我只需要一只手来确定我还需要改变什么。关于StackOverflow的其他问题过于简单;我知道我需要做什么样的改变,但我工作的东西太多了,我是一名jr开发人员,而不是一名sr开发人员作为导师

错误1:mysqli\u real\u escape\u string():无法在login.php中获取mysqli 这就是我的配置文件(define.mysqli.php)的样子


我正在尽最大努力将参数从mysql改为mysqli,但我不知道我遗漏了什么

+1!欢迎来到SO。最后一些问题就这样努力形成一个好的!做得好!您能找到错误行并使用问题下方的编辑链接在代码中用注释标记它们吗?在配置文件中,您可以打开连接,然后关闭连接。因此,链接将为空。不要逃避sql数据,请使用准备好的语句。既然你在迁移,为什么不改走PDO路线呢?这可能会让你省去一些麻烦。我正在使用旧代码,而且时间紧迫,我不知道如何创建PDO,但我会试试。我在其他的帖子上看到了这一点,但还是有些犹豫。在此期间,我将拆除我的逃生通道。我添加了关于哪些mysqli扩展有错误的评论(我没有正确设置参数),这是否回答了您的问题?
//top of code
<?php
//Display errors; COMMENT OUT WHEN NOT DEBUGGING
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
//DB
require('lib/func.php');

//The function looks like this
//Checks if user is already logged in and redirects.
if (isset($_SESSION['user'])){
$user = getUserInfo($_SESSION['user']);

if ($user != null) {
    if ($user['admin'] == 1) {
        header('Location: admin.php');
        exit;
    } else {
        header('Location: login.php');
    }
}
}
if (isset($_POST)){
if(sizeof($_POST) > 0) {
$user = mysqli_real_escape_string($link, trim($_POST['username'])); //error
$pass = mysqli_real_escape_string($link, trim($_POST['password'])); //error
if(isValidAdminUser($user,$pass)) {
    persistUser($user);
    header('Location: admin.php');
    exit;
} elseif(isValidStateUser($user,$pass)) {
    persistUser($user);
    header('Location: /');
    exit;
} else {
    $error = "Invalid username or password";
     }
   }
}
//what am i missing from this? what's am i doing wrong/needs improvement?
//top of file
<?php
include("define.mysqli.php");
if(!isset($_SESSION)){
session_start();
}
//....
function isValidAdminUser($uname,$pass) {
$query = "SELECT * FROM users WHERE login = '$uname' AND admin = 1";
$result = mysqli_query($link, $query) or die(mysqli_error($link)); //error
if(mysqli_num_rows($result) > 0) {
    $user = mysqli_fetch_array($result); //error
     if(md5($pass) == $user['password'])
        return true;
 }
 return false;
 }

 //the original code was 
   function isValidAdminUser($uname,$pass) {
    $query = "SELECT * FROM users WHERE login = '$uname' AND admin = 1";
    $result = mysql_query($query) or die(mysql_error()); //error

if(mysqli_num_rows($result) > 0) {
            $user = mysqli_fetch_array($result); //error
               if(md5($pass) == $user['password']) {
            return true;
       }
   }
 return false;
 }
 //i changed it to mysqli best i could but $link is undefined???
//in same code as above
   <?php
    # FileName="Connection_php_mysql.htm"
    # Type="MYSQL"
    # HTTP="true"
    if(!isset($_SESSION)){
    session_start();
    }
    if(!defined("DATABASE_PREFIX"))
    define("DATABASE_PREFIX","dbr_");
    $hostname = "127.0.0.1";
    $username = "*correct_username";
    $password = "*correct_password";
    $database = "*correct_database";
    $link = mysqli_connect($hostname, $username, $password, $database);

    if(!$link) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error() . PHP_EOL;
    exit;
    }

    //echo "Success: Established MySQL connection." . PHP_EOL;
    //echo "Host Information: " . mysqli_get_host_info($link) . PHP_EOL;

    mysqli_close($link);
    ?>