做公眾平台 在php頁面從資料庫中讀取資料,用在公眾平台的關注自動回複上
求指教怎麼做
public function handleEvent($postObj){ //header('Content-type:text/html;charset=utf-8'); //定義輸出格式編碼為utf-8 $db = new mysqli('127.0.0.1','root','123','weixin'); //建立mysql資料庫連接 $_ROWS = $db->query('SELECT * FROM event_subscribe'); //用sql語句擷取資料 //mysql_query("set names utf8");//設定編碼utf8 while($_ROW = $_ROWS->fetch_assoc()) //$title= $_ROW->ess_Title; //$Description= $_ROW->ess_Description; //$PicUrl= $_ROW->ess_PictureUrl; //$Url= $row->ess_Url; $title= $_ROW['ess_Title']; $Description= $_ROW['ess_Description']; $PicUrl= $_ROW['ess_PictureUrl']; $Url= $row['ess_Url']; //$contentStr = "歡迎關注喲"; $fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$msgType = "news"; $time = time();$textTpl = " %s %s %snews 1 <![CDATA[%s]]> %s %s %s 1 ";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time,$title,$Description,$PicUrl,$Url); echo $resultStr;
回複討論(解決方案)
沒有值傳到item內各項
log
2015-06-19 09:20:52 QUERY_STRING:signature=2580385de24285215c55584528a9732b68327681×tamp=1434676848&nonce=18942184112015-06-19 09:20:52 oTVfwt8FLtDlTnKOZgiolB-4dI6o gh_265404f8e5f8 1434676852news 1 <![CDATA[]]> 1
首先,這代碼是有很大問題的。
1.資料庫查詢資訊條數,使用while($_ROW = $_ROWS->fetch_assoc())表示迴圈查詢嘛,不知道你資料庫中有多少條記錄。假設只有一條,那最好。在這裡你可以使用var_dump($_ROW),查看下數組結構,再進行賦值。我推薦多條記錄使用$_ROW = $_ROWS->fetch_array()的方式,fetch_array()查詢結果為二維數組。assoc是一維數組。多條記錄用二維,單條記錄用一維即可。
2.回複資訊類型是圖文訊息,xml資料包中聲明的是單圖文,也就只能接收一條資料庫記錄了。你之前sql查詢的沒有where條件,還是先var_dump看一下。
3.最後的echo使用時記得改成return。
這個代碼中讓我最費解的是那個第8行的where。既然使用了where,說明你知道會查詢多條記錄。如果只有一條記錄,那麼
1.將sql查詢語句設定where條件,保證只能查出一條記錄。
2.不使用where,改成if(記得下面的代碼用括弧括起來),或者乾脆去掉where,只保留$_ROW = $_ROWS->fetch_assoc()
。
如果要組合多圖文訊息,那麼
1.使用do{}---while()迴圈,因為我之前講過,while迴圈會丟失第一條記錄(這或許就是你查不到賦值資訊的原因)。
2.迴圈
public function handleEvent($postObj) { //header('Content-type:text/html;charset=utf-8'); //定義輸出格式編碼為utf-8 $db = new mysqli('127.0.0.1','root','123','weixin'); //建立mysql資料庫連接 $_ROWS = $db->query('SELECT * FROM event_subscribe limit 5'); //用sql語句擷取資料 $newsArray = array(); do { $newsArray[]=array("Title"=>$_ROW['ess_Title'], "Description"=>$_ROW['ess_Description'], "PicUrl"=>$_ROW['ess_PictureUrl'], "Url" =>$row['ess_Url']); }while ($_ROW = $_ROWS->fetch_array()); $itemTpl = " <![CDATA[%s]]> %s %s %s "; $item_str = ""; foreach ($newsArray as $item){ $item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']); } $newsTpl = " %s %s %s news %s $item_str "; $result = sprintf($newsTpl, $postObj->FromUserName, $postObj->ToUserName, time(), count($newsArray)); return $result; }
新的代碼
public function handleEvent($postObj) { //header('Content-type:text/html;charset=utf-8'); //定義輸出格式編碼為utf-8 $db = new mysqli('127.0.0.1','root','123','weixin'); //建立mysql資料庫連接 $db->query("SET NAMES utf8");//防止亂碼 $_ROWS = $db->query('SELECT * FROM event_subscribe where IsPublic=1'); //用sql語句擷取資料 $_ROW = mysqli_fetch_assoc($_ROWS); $textTpl = " %s %s %s news 1 <![CDATA[%s]]> %s %s %s 1 "; $resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, time(),$_ROW['ess_Title'],$_ROW['ess_Description'],$_ROW['ess_PictureUrl'],$_ROW['ess_Url']); return $resultStr; }