1

PHP 関数内から SQL クエリを実行しようとしていますが、次のエラーが発生し続けます。

致命的なエラー: 14 行目の /homepages/23/d363590707/htdocs/bNames.php5 の非オブジェクトに対するメンバー関数 prepare() の呼び出し

行 14 は、次のメソッドの prepare メソッドを含む行です。

function testing()
{
    $query = "SELECT `no` FROM `brandNames` WHERE `id` = $index";
    $stmt = $dbc->prepare($query);   <--- line 14 -----------------<<<
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($no);
    $stmt->fetch(); 
}

注:コードブロックを(関数を使用せずに)ページに貼り付けると、クエリが機能し、問題はありません。

また、この関数にパラメーターを追加して、テーブル名、列名、および値を置き換えるつもりです。これは、問題が発生する可能性が最も少ないバージョンでありながら、それでも私の問題を示しています。

前もって感謝します

編集:これはファイルがどのように見えるかです:

<?php
    require_once('connectvars.php'); //contains the info used in mysqli_connect

    $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);


    function testing($dbc)
    {
        $query = "SELECT `no` FROM `brandNames` WHERE `id` = $index";
        $stmt = $dbc->prepare($query);
        $stmt->execute();
        $stmt->store_result();
        $stmt->bind_result($no);
        $stmt->fetch(); 
    }

//more code
?>
4

3 に答える 3

4

問題は、 $dbc オブジェクト (おそらく PDO?) が関数のスコープにないことです。詳細については、こちらをご覧ください: http://php.net/manual/en/language.variables.scope.php

これを修正するには、次の行を関数の先頭に追加してみてください。

global $dbc;
于 2012-05-09T17:15:12.223 に答える
4

$dbcとして定義することもできますが、単純に関数にglobal渡すことをお勧めします。$dbc

function testing($dbc)
{
    $query = "SELECT `no` FROM `brandNames` WHERE `id` = $index";
    $stmt = $dbc->prepare($query);   <--- line 14 -----------------<<<
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($no);
    $stmt->fetch(); 
}

ここで、 を呼び出すときに:testing()を渡す必要があります。$dbctesting($dbc);

于 2012-05-09T17:16:50.897 に答える
1

関数のスコープにglobal $dbc;入れるには、おそらく関数の先頭にa が必要です。

于 2012-05-09T17:15:10.890 に答える