我一直在努力将数组更改为对象,但它无法正常工作。但是,我的第二个函数,代码几乎相同,完美无缺。 这是类和函数:
class Job {
private $connection;
function __construct($mysqli){
$this->connection = $mysqli;
}
function getJobModal() {
$stmt = $this->connection->prepare("SELECT id, name, description, company, county, parish, location, address FROM job_offers WHERE id=?");
$stmt->bind_param("i", $job_id);
$stmt->bind_result($id_from_db, $name_from_db, $desc_from_db, $company_from_db, $county_from_db, $parish_from_db, $location_from_db, $address_from_db);
$stmt->execute();
$array = array();
while($stmt->fetch()) {
$job = new StdClass();
$job->id = $id_from_db;
$job->name = $name_from_db;
$job->description = $desc_from_db;
$job->company = $company_from_db;
$job->county = $county_from_db;
$job->parish = $parish_from_db;
$job->location = $location_from_db;
$job->address = $address_from_db;
array_push($array, $job);
}
return $array;
$stmt->close();
}
}
isset,创建一个变量,该变量应该使数组成为对象
if(isset($_GET["view"])) {
$Job->getJobModal($_GET["view"]);
}
$job_single_array = $Job->getJobModal();
询问一些物体,我尝试了不同的方法,你可以看到
echo $job_single_array->id;
echo $job_single_array->name;
echo $job_single_array[$i]->company;
echo $job_single_array['id'];
var_dump($job_single_array);
表单,注意:$ job_array工作正常
for($i = 0; $i < count($job_array); $i++) {
echo "<form action='jobs.php' method='get'>";
echo "<a class='list-group-item' href='?view=".$job_array[$i]->id."'>";
echo "<h4 class='list-group-item-heading' name='job_id'>".$job_array[$i]->id."</h4>";
echo "<h4 class='list-group-item-heading'>".$job_array[$i]->name."</h4>";
echo "<p class='list-group-item-text'>".$job_array[$i]->company.", ".$job_array[$i]->county.", ".$job_array[$i]->parish."</p>";
echo "</a>";
echo "</form>";
}
错误
Notice: Trying to get property of non-object in /.../jobs.php on line 105
Notice: Trying to get property of non-object in /.../jobs.php on line 106
Notice: Undefined offset: 5 in /.../jobs.php on line 107 Notice: Trying to get property of non-object in /.../jobs.php on line 107
Notice: Undefined index: id in /.../jobs.php on line 108
array(0) { }
答案 0 :(得分:0)
如documentation for bind_result()
中所述:
请注意,所有列必须在mysqli_stmt_execute()之后和调用mysqli_stmt_fetch()之前绑定。根据列类型,绑定变量可以静默更改为相应的PHP类型。
所以只需更改行的顺序:
$stmt = $this->connection->prepare("SELECT id, name, description, company, county, parish, location, address FROM job_offers WHERE id=?");
$stmt->bind_param("i", $job_id);
$stmt->execute();
$stmt->bind_result($id_from_db, $name_from_db, $desc_from_db, $company_from_db, $county_from_db, $parish_from_db, $location_from_db, $address_from_db);
它们应该在fetch()
期间可用。
另外,在你的函数的这一行:
$stmt->bind_param("i", $job_id);
看起来您的$job_id
变量未定义。它来自哪里?
此外,你的函数返回一个数组,这是var_dump告诉你的:
var_dump($job_single_array);
// array(0)
// it is of length 0 because your query is failing,
//probably because $job_id is undefined
$job_single_array = $Job->getJobModal();
// this is not true. getJobModal() returns an array
使用foreach:
foreach ($Job->getJobModal() as $job_single_array) {
//here use your object
}