【问题标题】:PHP array doesn't change to objectPHP数组不会更改为对象
【发布时间】:2016-02-09 04:43:17
【问题描述】:

我已经尝试了几个小时将数组更改为对象,但它不起作用。然而,我的第二个功能,其中代码几乎相同的工作完美。 这是类和函数:

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

【问题讨论】:

  • 对$Job-&gt;getJobModal($_GET["view"]); 的调用的返回值没有被分配给任何东西......而且将$_GET["view"] 作为参数传递给$Job-&gt;getJobModal() 也没有多大意义,因为你不要用它做任何事情
  • 而 getJobModal() 不接受任何参数...你如何传递 $_GET["view "] ?不管怎样,你能指出第 105/106 行写的是什么吗?
  • 你试过(object)$myArray吗?
  • 其他问题:你正在做 $stmt->bind_param("i", $job_id);,但是 $job_id 是在哪里定义的?你可能没有结果,所以你有一个空数组。
  • 第 105 和 106 行是 echo $job_single_array->id; echo $job_single_array->name;

标签: php arrays function oop


【解决方案1】:

如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
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多