AJAX 请求调用的 PHP 页面上包含一个文件时遇到了问题:
$(document).ready(function() {
$("#image-status").html('Processing images...');
});
function process_images(files) {
$.ajax ({
type: "POST",
url: "includes/imageprocessor.php",
data: {files: JSON.stringify(files)},
success: function(data){
$("#image-status").html(data);
}
});
}
我正在图像处理器上尝试这个require_once.php:
require_once("db_connect.php");
它也在包含目录中,并且可以工作:我只是在另一个页面上使用它来运行一个运行良好的插入。但是当我尝试运行时:
function get_files($id) {
$query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id");
try {
$query->execute();
$rows = $query->fetch();
} catch (PDOException $e) {
die($e->getMessage());
}
}
稍后在图像处理器.php中,它出错:
Fatal error: Call to a member function prepare() on a non-object in /home/yogabopvolume26/theprivatesector.org/epic/includes/imageprocessor.php on line 90
就像它首先不需要db_connect一样(这就是声明$db的地方)。但它也不会返回找不到db_connect.php的错误。
basename(__DIR__)
在图像处理器上.php(通过 AJAX 请求回显)返回"include"。
我尝试在require_once中同时使用绝对 URL 和根路径,但随后它既没有出错也没有继续使用图像处理器.php:返回require_once后该文件没有回显。我也无法从session_start获取当前会话(我可以从原始页面 [profile.php] print_r _SESSION 美元,因此会话处于活动状态)。也许他们有关系?我不知道出了什么问题。
希望你的db_connect.php
是链接:
try {
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
如果您在外部将连接对象用于连接文件,则必须使用该global
将该对象访问到您的特定文件中
据我所知,您收到此错误是因为您没有在文件imageprocessor.php
中调用对象$db
,请尝试以下操作:
function get_files($id) {
global $db;
$query = $db->prepare("SELECT * FROM files INNER JOIN file_profile_join ON files.id = file_profile_join.file_id WHERE file_profile_join.profile_id = " . $id . " GROUP BY files.id");
try {
$query->execute();
$rows = $query->fetch();
} catch (PDOException $e) {
die($e->getMessage());
}
}
在非对象上调用成员函数 someFunc()
......
当您想使用任何对象的 someFunc() 方法时,会发生这种类型的错误,但不幸的是您的对象不是对象。
假设
$obj = New SomeObj();
$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull
$nextObj->newMethod();
在此代码中,仅当$nextObj
是对象时,$nextObj->newMethod()
才会起作用。但是我们不能确定这一点,因为$obj->someMethod();
只有在成功时才返回一个对象,而不成功时返回其他对象。
防止这种情况的一个好方法是。
$nextObj = $obj->someMethod(); // << Suppoes someMethod() returns a object if successfull
if(is_object($nextObj)){
$nextObj->newMethod();
} else {
//Now you know that there is error while executing $obj->someMethod();
}
另一件事:由于您有一个函数function get_files($id)
.你自己可以看到$db
变量不是在你的函数范围内定义的。所以,$db暂时什么都不包含。与其他答案一样,您应该使用 global $db
或者可以将 $db
对象作为参数传递给您的函数。