問題は、実行するvar_dump()
と目的の結果が得られることですが、PDO が配列エントリの 1 つをスキップすると、目的の結果が得られないように見えます。
$bd = $userObj->fetchPanel(array('category_id'=>$cdata['id']));
//echo '<pre>'; var_dump($bd); echo '</pre>';die;
$barr = array();
if(count($bd) > 0){
foreach($bd as $bval){
$barr[] = $bval['id'];
}}
echo '<pre>'; var_dump(implode(',', $barr)); echo '</pre>';
var_dump()
返さstring(7) "270,498"
れた - - 何が望ましいか。
$bragdataarr = $db->dbh->prepare("SELECT p.id,p.brag,p.brag_desc,p.brag_id,p.user_id, p.panel_id,p.domainurl,p.type,p.price FROM ".USERS_BRAG." as p left join ".USERS." as u on p.user_id=u.id WHERE u.status !=0 AND p.panel_id IN (:imp) AND p.status = :status ORDER BY p.id DESC LIMIT :lim, :page");
echo '<pre>'; var_dump(implode(',', $barr)); echo '</pre>';
var_dump()
返さstring(7) "270,498"
れた - - 何が望ましいか。
$imp = implode(',',$barr);
echo '<pre>'; var_dump($imp); echo '</pre>';
var_dump()
返さstring(7) "270,498"
れた - - 何が望ましいか。
$brgdataarr->bindValue(':imp',$imp ? $imp : "",PDO::PARAM_STR);
echo '<pre>'; var_dump($bragdataarr->bindValue(':imp',$imp ? $imp : "",PDO::PARAM_STR)); echo '</pre>';
var_dump()
返さbool(true)
れた - - 何が望ましいか。ただし、表示されるのは、両方の「270,498」ではなく、文字列「270」のみです。なぜこうなった?
$brgdataarr->bindValue(':status',1, PDO::PARAM_INT);
$brgdataarr->bindValue(':lim',$limit_start, PDO::PARAM_INT);
$brgdataarr->bindValue(':page',$page_records, PDO::PARAM_INT);
$brgdataarr->execute();
$brgdataarr = $brgdataarr->fetchAll(PDO::FETCH_ASSOC);
bindValue()
トラブルシューティングから、これは implodeを使用した場合にのみ発生することがわかりました。SQL ステートメントに implode を含めると、implode は正常に動作しますが、implode が発生すると空の文字列エラーが発生します。
例:
$brgdataarr = $db->dbh->prepare("SELECT p.id,p.brag,p.brag_desc,p.brag_id,p.user_id, p.panel_id,p.domainurl,p.type,p.price FROM ".USERS_BRAG." as p left join ".USERS." as u on p.user_id=u.id WHERE u.status !=0 AND p.panel_id IN (".implode(',',$barr).") AND p.status = :status ORDER BY p.id DESC LIMIT :lim, :page");