【问题标题】:Simple PHP MySQL $con undefined简单的 PHP MySQL $con 未定义
【发布时间】:2014-02-19 04:19:24
【问题描述】:

解决方案:

我修改了 kcdwayne 的测试(使用 test.php 和 register.php)并确定问题在于使用文件名“db.php”。我将它重命名为“datab.php”,它似乎在使用它的任何地方都可以工作。有趣的。感谢您的回答!


原帖:


我有一个文件 - checkuser.php - 从登录表单发布到以验证用户的凭据。给出了usernamepassword。通过一个外部文件 - db.php - 我正在尝试建立与 MySQL 数据库的连接。设置:

checkuser.php:

    session_start();
    error_reporting(E_ALL); 
    ini_set( 'display_errors','1');
    require "db.php";

db.php:

    $con = mysqli_connect("server", "user", "pass", "db");
    if (mysqli_connect_errno($con)) {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }

...稍后在 checkuser.php 中:

    $username = $_POST['username'];
    $password = $_POST['password'];

    $sql = mysqli_query($con, "SELECT * FROM userdata WHERE username='$username' AND password='$password' AND activation='true'");

因此,这就是我的问题:

    Notice: Undefined variable: con in /path/to/checkuser.php on line 23

checkuser.phpdb.php 在同一个文件夹中;如果将db.php 中的代码移动到checkuser.php 本身,则可以轻松建立MySQL 连接。

我做错了什么?


checkuser.php:

    <?php
        session_start();

        error_reporting(E_ALL); 
        ini_set( 'display_errors','1');

        require "db.php";

        $username = $_POST['username'];
        $password = $_POST['password'];

        if((!$username) || (!$password)){
            echo "<font color='white'>Please enter ALL of the information! <br />";
            include 'login.php';
            exit();
        }

        $password = md5($password);

        $sql = mysqli_query($con, "SELECT * FROM userdata WHERE username='$username' AND password='$password' AND activation='true'");
        $login_check = mysqli_num_rows($sql);


        if($login_check > 0) {
            while($row = mysqli_fetch_assoc($sql)) {
                ... set some $_SESSION variables ...
            }
        }
    ?>

db.php:

    <?php
        $con = mysqli_connect("server", "user", "password", "database");

        if (mysqli_connect_errno($con)) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
    ?>

【问题讨论】:

  • require "db.php"; 也在checkuser.php 里面吗?
  • 是 - 第一个参考,最后一行。
  • 我需要查看您所有文件的完整代码。我不会做任何猜测。
  • 不要使用$sql = mysqli_query($con, "SELECT... 尝试使用$sql="SELECT... 及以下$login_check = mysqli_num_rows($con, $sql);
  • 我用kcdwayne的测试,找到了解决办法;使用 db.php 显然是一个禁忌。重命名为datab.php,一切正常。

标签: php mysql


【解决方案1】:

如果db.phpcheckuser.php 上是included/required,则该变量应该存在,前提是:

  • $con 不在checkuser.php 无权访问的块内。
  • 您请求它的地方可以接收它(即,它作为参数传递到函数中,或者它没有包装在无权访问 $con 的范围内。

试试这个:

创建一个名为test.php 的文件,并在其中放置

$var = 'this is my test var';

然后在同一个文件夹中创建一个名为register.php 的文件,然后放入only

require('test.php');
echo $var;

如果它有效,您的问题要么在范围内,要么只是没有加载db.php

【讨论】:

  • db.php 就是那 4 行,仅此而已。 checkuser.php 以这种方式需要它,但该变量不可访问。我确保每个范围都允许在需要的地方使用 $con。当我声明全局 $con,然后包含 db.php 时,$con 保留为空; db.php 保持不变。
  • $sql = mysqli_query($con, "SELECT... 是否包含在函数中?
  • 否;它也在 checkuser.php 的 open 中。
  • (在您编辑之后)我尝试了 test.php/register.php 示例 - 它有效。它必须是 db.php 本身。我将尝试使用不同的文件名并查看是否有任何更改,然后我将再次验证范围是否可以从所有方法访问。
  • 请记住,如果您使用的是global(我强烈建议您不要这样做,尤其是对于数据库连接器等敏感项目),请记住您必须在它之前放置global $con; 并且 在您将使用它的位置/上方(当然,提供更窄的范围,否则就不需要global)。
猜你喜欢
  • 2021-03-10
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多