我正在尝试从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
?>
答案 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()
时,您需要传递$dbc
:testing($dbc);
。
答案 2 :(得分:1)
您可能需要在功能开始时使用global $dbc;
来into the function's scope。