PHP中的mysql_query参数错误

时间:2012-05-21 04:49:07

标签: php mysql

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

$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。有关为何发生此错误的任何解释?

5 个答案:

答案 0 :(得分:3)

$connection变量不在default_func()函数的scope中。

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

答案 1 :(得分:3)

default_func中无法看到$ connection变量。如果你想要它,只需将其声明为全局:

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');
    }
}

答案 2 :(得分:2)

$connection未在函数内定义。

无论如何都不需要,因为如果你把它留下来,就会假设最后打开的连接。

解决方案:只需从,$connection来电中删除mysql_query

答案 3 :(得分:1)

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

答案 4 :(得分:1)

由于您没有在函数内部对$connection变量进行十分转换,并且您想使用外部变量$connection,因此必须将其用作global $connection以便外部的范围变量在你的函数中持续存在