可能重复:
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。有关为何发生此错误的任何解释?
答案 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
以便外部的范围变量在你的函数中持续存在