PHP数组不会更改为对象

时间:2015-11-08 12:17:36

标签: php arrays function oop

我一直在努力将数组更改为对象,但它无法正常工作。但是,我的第二个函数,代码几乎相同,完美无缺。 这是类和函数:

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) { }

1 个答案:

答案 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
}