※ 引述《Relent (遺憾)》之銘言:
: 我在php中做更新紀錄的動作
: 根據print出來的sql語法如下
: update `tableS` set `history`='[{"time":"2016-07-14
: 18:24:22","count":0,"link":"http://aaa.bbb.cc"}]' where account='110101'
: 只是我的資料表history欄位裡面的資料,卻變成了這樣
: [{"time":"2016-07-14
: 18:24:22","count":0,"link":"http://aaa.bbb.cc"},
: {"time":"2016-07-14
: 18:24:22","count":0,"link":"http://aaa.bbb.cc"},
: {"time":"2016-07-14
: 18:24:22","count":0,"link":"http://aaa.bbb.cc"},
: {"time":"2016-07-14
: 18:24:22","count":0,"link":"http://aaa.bbb.cc"}]
: 多出了3筆同樣的紀錄
: 想請問一下各位大大這種狀況是因為什麼呢
: 程式碼如下,
: [code]
: $count=0;
: $bitStr="1101010101111010";
: while($count<30 && strlen($bitStr)>0){
: $percent=0.1;
: $obj=new stdClass();
: $obj->time=$checkDate;
: $obj->count=$count*$percent;
: $obj->link=$url;
: $arr=array();
: array_push($arr,$obj);
: $str=json_encode($arr);
: $sql="update tableS set history='".$str."' where account='".$bitStr."'";
: echo $sql;
: mysql_query($sql);
: $count++;
: $bitStr=substr($bitStr,0,-1);
: }
: [/code]
1. 請愛用PDO的parameters binding, 不然遇到SQL injection...
2. 儲存時間最好用timestamp, 不然也期望你是UTC time..否則換server = gg
3. 你如果在php5.5+其實可以直接$str = json_encode([$obj]);
省去
$arr = array();
array_push($arr,$obj);
4. 你的110101010111101 才16個數字, 為什麼要while($count<30)?
$bitStrLength = strlen($bitStr);
for($i = 0, $i <= strlen($bitStrLength), $i++)
5. 照上面的code來看不應該會output3個一樣的, 但是我如果是你會這樣寫
{code:php}
$count = 0;
$percent = 0.1;
$bitStr = "1101010101111010";
$bitStrLength = strlen($bitStr);
for ($i = 0; $i < $bitStrLength; $i++) {
// don't really know why you storing objects into json but whatever
$obj = new stdClass();
$obj->time = $checkDate;
$obj->count = $i * $percent;
$obj->link = $url;
$str = json_encode([$obj]);
$sql = $sql="update tableS set history='".$str."' where account='".$bitStr."'";
echo $sql . "\n";
$bitStr = substr($bitStr, 0, -1);
}
{code}