尝试从PHP函数中执行SQL查询

时间:2012-05-09 17:12:37

标签: php mysql sql mysqli

我正在尝试从PHP函数中执行SQL查询,但我不断收到以下错误:

  

致命错误:在非对象中调用成员函数prepare()   第14行/homepages/23/d363590707/htdocs/bNames.php5

第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
?>

3 个答案:

答案 0 :(得分:4)

问题是$ dbc对象(可能是PDO?)不在你的函数范围内。 您可以在此处详细了解:http://php.net/manual/en/language.variables.scope.php

要解决此问题,您可以尝试在功能顶部添加以下行:

global $dbc;

答案 1 :(得分: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);

答案 2 :(得分:1)

您可能需要在功能开始时使用global $dbc;into the function's scope