0

重複の可能性:
mysql_fetch_array() は、パラメーター 1 がリソースであると想定しており、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 がリソース null になることを期待しています」というメッセージが表示されます。

$connection がデータベース接続リソース ID の値に割り当てられていることを確認したので、それは問題ではないようです。$connection の値が NULL になる理由がわかりません。このエラーが発生する理由について何か説明はありますか?

4

5 に答える 5

3

$connectionvariable は function のスコープにありませんdefault_func()

接続が 1 つしかない場合 - 2 番目のパラメータを省略してください

于 2012-05-21T04:52:38.727 に答える
3

$connection 変数は 内に表示されませんdefault_func。そうしたい場合は、そこでグローバルとして宣言するだけです:

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

ただし、グローバル変数は、コードが少し複雑になると、診断が難しいエラーを引き起こす可能性があります。非表示のグローバル状態 (2 番目のパラメーターを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関数内で定義されていません。

省略した場合は、最後に開かれた接続が想定されるため、いずれにせよ必須ではありません。

解決策: を通話,$connectionからドロップするだけです。mysql_query

于 2012-05-21T04:52:53.687 に答える
1

$connectionがそのスコープで定義されていない場合は、接続を関数に渡すか、グローバルとして宣言するか、接続が 1 つしかないためそのままにしておきます
PHP VARIABLE SCOPE

于 2012-05-21T04:54:09.783 に答える
1

関数内で変数を宣言しておらず$connection、外部変数を使用したいので、外部変数のスコープが関数内で持続するよう$connectionに使用する必要がありますglobal $connection

于 2012-05-21T04:56:08.070 に答える