1

由于某种原因,PHP 无法间歇性地为我的对象的属性赋值!如果我不断刷新页面,它会工作大约 4 次 5 但在失败的一个上,所有值都没有分配,我发现对象值丢失了。

我有一个收集数据库行并将其分配给对象的功能。查询不是每次都提取数据的问题。问题与这条线有关

$obj->$key = str_replace("''","'",$row[$value[0]]);

我打印出来以确保值存在,然后直接打印出对象参数,我可以看到所有属性值都是空白的。并不是说它与值本身无关,如果我只是将值设置为硬编码字符串,同样的事情也会发生

$obj->$key = 'a'

我对标准变量没有这个问题,值总是在那里,似乎对象参数值不能被分配 1 超时 5。

它似乎不是与代码相关的问题,因为它工作 4 次 5。

function getRow($class,$where = false,$order = false, $limit = false) {

    $obj = new $class();

    $sql = "select * from ".$obj->table." where 1 ";

    if ($where) {
        foreach ($where as $key => $value) {
            $opvalue = $this->getOperator($value);
            $op = $opvalue[0];
            $value = $opvalue[1];
            if ($obj->cols[$key][1] == 1)
            $sql .= "and ".$obj->cols[$key][0]." $op $value ";
            else if ($obj->cols[$key][1] == 2)
            $sql .= "and ".$obj->cols[$key][0]." $op '$value' ";
        }
    }
    if ($order)
    $sql .= "order by $order ";
    if ($limit)
    $sql .= "limit $limit ";

    $res = $this->runQuery($sql);


    //map values
    if ($row = mysql_fetch_assoc($res)) {


//            print_r($row);

        foreach ($obj->cols as $key => $value) {

            if ($obj->cols[$key][1] == 3) {

                $obj->$key = poststringToArray($row[$value[0]]);

            }
            else {

                $obj->$key = str_replace("''","'",$row[$value[0]]);


//                    echo "obj->$key  = {$row[$value[0]]}<br>";
//
//                    echo "obj->$key = ".$obj->$key.'<br>';



            }

        }
//            echo '<p>';
//            print_r($obj);
//            echo '</p>';

    }
    else {

        return false;

    }




    return $obj;
}

忘记上面的复杂代码,这里有一个简单的示例,其中属性值将间歇性地丢失空白,但变量保留该值。如果我不断刷新这个脚本,'id' 的值有时会是空白的!

Class SalesOrderService {

var $id;

}
$test = 'a string';

echo 'the value of $test is \''.$test."'";

echo '<p>&nbsp;</p>';

$so = new SalesOrderService();

$so->id = 'aaa';

print_r($so);
4

1 回答 1

0

解决方案是 5.3 中的一个错误,我升级到 5.4,现在可以正常工作

于 2013-09-16T09:54:40.230 回答