0

可能重复:
mysql_fetch_array() 期望参数 1 是资源,选择中给出的布尔值

$connection = mysql_connect('localhost', 'username', 'password') or die('Database connection failed:' . mysql_error());                                

mysql_select_db('db_test', $connection) or die('Database connection failed: ' . mysql_error());

$var = '';

switch ($var) {
    case 'dosomething':
        break;
    default:
        default_func();
}

function default_func() {
    if (isset($_POST['submit'])) {
        $query = "INSERT INTO `table_test` (`some_field`) VALUES ('test')";
        $result = mysql_query($query, $connection) or die(mysql_error());

    header('Location: index.php?submit=success');
    }
}

mysql_close($connection);

我得到了一个“mysql_query() 期望参数 2 是资源空给定错误”。

我确保将 $connection 分配给数据库连接资源 ID 的值,所以这似乎不是问题。不知道为什么 $connection 的值给了我一个 NULL。关于为什么会发生此错误的任何解释?

4

5 回答 5

3

$connection变量不在函数范围default_func()

如果您只有一个连接 - 只需省略第二个参数

于 2012-05-21T04:52:38.727 回答
3

$connection 变量在 中不可见default_func。如果你想要它,只需将它声明为全局:

function default_func() {
    global $connection;
  ...
}

但是,当代码稍微复杂一些时,全局变量可能会导致难以诊断的错误。隐藏的全局状态(如果您完全不使用第二个参数,这就是您正在使用的状态mysql_query)甚至更糟。你最好将连接传递给函数:

switch ($var) {
    case 'dosomething':
        break;
    default:
        default_func($connection);
}

function default_func($conn) {
    if (isset($_POST['submit'])) {
        $query = "INSERT INTO `table_test` (`some_field`) VALUES ('test')";
        $result = mysql_query($query, $conn) or die(mysql_error());

    header('Location: index.php?submit=success');
    }
}
于 2012-05-21T04:53:46.810 回答
2

$connection没有在函数内部定义。

无论如何它都不是必需的,因为如果您将其排除在外,则假定最后打开的连接。

解决方案:只需,$connectionmysql_query通话中删除。

于 2012-05-21T04:52:53.687 回答
1

$connection未在该范围内定义,将连接传递给函数或将其声明为全局或将其排除在外,因为您只有一个连接
PHP VARIABLE SCOPE

于 2012-05-21T04:54:09.783 回答
1

由于您没有$connection在函数内部贴花变量,并且您想使用外部变量$connection,因此您必须使用它,global $connection以便外部变量的范围在您的函数中持续存在

于 2012-05-21T04:56:08.070 回答