我一直想知道这个问题。我有两个PHP程序几乎完全相同,除了它们是一个函数而另一个不是。此外,一个工作,另一个发回错误:
Call to a member function fetch_object() on a non-object
我通过省略变量并插入确定的字符串并添加$con->errno
而不是mysqli_errno
来修复无效的那个。但是,当我再次使用变量替换字符串时,问题又返回了。
所以,我的问题是:是什么导致了这个错误,我将如何解决它。另外,为什么第二个代码中出现错误而不是第一个?
第一个代码(有效)
<?php
$con = new mysqli("database info");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$stmt = $con->query("SELECT coordinator, announcements, description, comments, picture FROM Class_data WHERE class_year = '" .$class. "';");
$result_row = $stmt->fetch_object();
$coordinator = $result_row->coordinator;
$announcement = $result_row->announcements;
$description = $result_row->description;
$comments = $result_row->comments;
$picturepath = $result_row->picture;
mysqli_error($con);
mysqli_close($con);
if ($picturepath == "")
{
$picturepath = "../images/AlumnLogo.png";
}
?>
第二段代码(不起作用)
<?php
function fetch($page, $content1, $content2, $content3)
{
$con = new mysqli("database info");
if ($con->errno)
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$stmt = $con->query("SELECT '" .$content1. "' , '" .$content2. "' , '" .$content3. "' FROM '" .$page. "';");
$result_row = $stmt->fetch_object();
$content = array();
$content[0] = $result_row->body;
$content[1] = $result_row->calendar;
$content[2] = $result_row->announcements;
$output = implode("--",$content);
mysqli_error($con);
mysqli_close($con);
return $output;
}
?>
非常感谢!
答案 0 :(得分:1)
您使用单引号引用列名称。你不能这样做,你需要使用反引号引用表名和列名(如果是保留字,空格等),只需要使用单引号或双引号引用(非整数...)值。 / p>
将您的代码更改为:
$stmt = $con->query("SELECT `" .$content1. "` , `" .$content2. "` , `" .$content3. "` FROM `" .$page. "`;");
^ All these
顺便说一句,我假设你使用了一个白名单来表示你的表名和列名。如果没有,你应该避免sql注入。
向数据库调用添加错误处理也是一个好主意。使用mysqli的一种简单方法是将mysqli_report(MYSQLI_REPORT_STRICT);
放在脚本的开头。这将导致mysqli抛出异常,这样您就不必在每次数据库调用时检查个别错误。
答案 1 :(得分:0)
错误消息只是意味着您尝试在不是对象的事物上调用方法。问题是$stmt
不是对象!
这是因为您的SQL Statemetn中存在错误。 $con->query()
在这种情况下重新false
。因此,您尝试执行的内容类似于false->fetch_object();
。并且false
不是对象......
尝试打印生成的SQL语句。它可能会包含一些语法错误。解决这些问题,它会起作用