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

虽然您可以定义$dbcglobal,但我建议简单地传递$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(),您需要传入$dbc: testing($dbc);

于 2012-05-09T17:16:50.897 回答
1

您可能需要global $dbc;在函数的开头将其带入函数的作用域

于 2012-05-09T17:15:10.890 回答