未定义的变量是否实际定义?

时间:2014-12-18 00:35:18

标签: php mysql

我正在努力获得一个简单的注册/登录表单。我目前在访问与数据库的连接时遇到问题。我不断得到一个“未定义的变量”。

以下是我的连接代码:

<?php

$hostName = 'localhost';
$userName = 'root';
$userPass = '';
$database = 'test';

$con = new mysqli($hostName, $userName, $userPass, $database);

if($con->connect_errno){
    printf("Connect failed...");
    exit();
}

通过在我的php文件中包含这个,我不应该能够访问$ con吗?或者每次访问文件时都必须重新定义我的连接?

根据我的经验,我没有必要重新定义它,所以我对这样做持怀疑态度。这是将它绊倒的功能。

<?php

include 'user-functions.php';
include 'connect.php';

function checkDuplicateEmail($email){
    $query = "SELECT `playerEmail` FROM `players` WHERE `playerEmail` = '$email'";

    $result = $con->query($query);

    if($result->num_rows > 1){
        addError("Duplicate email: " . $email);
        return True;
    }
    return False;
}

function checkDuplicateUserName($userName){
    $query = "SELECT `playerName` FROM `players` WHERE `playerName` = '$userName'";

    $result = $con->query($query);

    if($result->num_rows > 1){
        addError("Duplicate username: " . $userName);
        return True;
    }
    return False;
}

?>

现在,这是唯一一个为$ con说“Undefined Variable”的位置。我错过了什么吗?

以下是网页上的两个错误:

  1. 未定义的变量:con
  2. 在非对象上调用成员函数query()。

2 个答案:

答案 0 :(得分:6)

$con位于全局范围内,不适用于您的函数。您需要将其作为函数中代码的参数传递给它才能访问它:

function checkDuplicateEmail($email, $con){
    $query = "SELECT `playerEmail` FROM `players` WHERE `playerEmail` = '$email'";

    $result = $con->query($query);

    if($result->num_rows > 1){
        addError("Duplicate email: " . $email);
        return True;
    }
    return False;
}

$var = checkDuplicateEmail($email, $con);

您也可以使用global关键字,但这是不好的做法,因此我不会在此推荐。

答案 1 :(得分:3)

这是一个范围问题。将$con定义为全局或将其作为参数传递给需要它的每个函数。