ホームページ >バックエンド開発 >PHPチュートリアル >PHP は MySQL データベースからデータを読み取り、WeChat 公式アカウントで使用します

PHP は MySQL データベースからデータを読み取り、WeChat 公式アカウントで使用します

WBOY
WBOYオリジナル
2016-06-23 13:32:191243ブラウズ

WeChat を公開プラットフォームにします。php ページのデータベースからデータを読み取り、WeChat 公開プラットフォームの自動返信に使用します。
やり方を教えてください

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 = "<xml> 					<ToUserName><![CDATA[%s]]></ToUserName> 					<FromUserName><![CDATA[%s]]></FromUserName> 					<CreateTime>%s</CreateTime>					<MsgType><![CDATA[news]]></MsgType> 					<ArticleCount>1</ArticleCount> 					<Articles> 						<item> 							<Title><![CDATA[%s]]></Title>  							<Description><![CDATA[%s]]></Description> 							<PicUrl><![CDATA[%s]]></PicUrl> 							<Url><![CDATA[%s]]></Url> 						</item> 						 					</Articles> 					<FuncFlag>1</FuncFlag> 				</xml>";				$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time,$title,$Description,$PicUrl,$Url);        echo $resultStr;    


ディスカッションに返信します。


No value returns to Each item in item
log

2015-06-19 09:20:52 QUERY_STRING:signature=2580385de24285215c55584528a9732b68327681&timestamp=1434676848&nonce=18942184112015-06-19 09:20:52 <xml> 					<ToUserName><![CDATA[oTVfwt8FLtDlTnKOZgiolB-4dI6o]]></ToUserName> 					<FromUserName><![CDATA[gh_265404f8e5f8]]></FromUserName> 					<CreateTime>1434676852</CreateTime>					<MsgType><![CDATA[news]]></MsgType> 					<ArticleCount>1</ArticleCount> 					<Articles> 						<item> 							<Title><![CDATA[]]></Title>  							<Description><![CDATA[]]></Description> 							<PicUrl><![CDATA[]]></PicUrl> 							<Url><![CDATA[]]></Url> 						</item> 						 					</Articles> 					<FuncFlag>1</FuncFlag> 				</xml>

まず、このコードには大きな問題があります。
1. データベース内の情報の数をクエリするには、while($_ROW = $_ROWS->fetch_assoc()) を使用して、データベースにレコードがいくつあるかわかりません。 1つだけあればそれが一番良いです。ここで、var_dump($_ROW) を使用して配列構造を表示し、それを割り当てることができます。複数のレコードに対して $_ROW = $_ROWS->fetch_array() を使用することをお勧めします。 fetch_array() クエリの結果は 2 次元配列です。 assoc は 1 次元配列です。複数のレコードには 2 つのディメンションを使用し、単一のレコードには 1 つのディメンションを使用します。
2. 応答メッセージのタイプはグラフィック メッセージであり、XML データ パケットは単一のグラフィック メッセージを宣言するため、データベース レコードを 1 つだけ受信できます。以前の SQL クエリには where 条件がなかったため、最初に var_dump を確認する必要があります。
3. 使用するときは、返す最後のエコーを変更することを忘れないでください。

このコードで私にとって最も不可解なのは、8 行目の where です。 where を使用するということは、複数のレコードがクエリされることがわかっていることを意味します。レコードが 1 つだけある場合は、
1. SQL クエリ ステートメントに where 条件を設定して、レコードが 1 つだけ見つかるようにします。
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 = "<item>        <Title><![CDATA[%s]]></Title>        <Description><![CDATA[%s]]></Description>        <PicUrl><![CDATA[%s]]></PicUrl>        <Url><![CDATA[%s]]></Url>        </item>";        $item_str = "";        foreach ($newsArray as $item){        	$item_str .= sprintf($itemTpl, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);        }        $newsTpl = "<xml>        <ToUserName><![CDATA[%s]]></ToUserName>        <FromUserName><![CDATA[%s]]></FromUserName>        <CreateTime>%s</CreateTime>        <MsgType><![CDATA[news]]></MsgType>        <ArticleCount>%s</ArticleCount>        <Articles>        $item_str</Articles>        </xml>";                $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 = "<xml>                     <ToUserName><![CDATA[%s]]></ToUserName>                     <FromUserName><![CDATA[%s]]></FromUserName>                     <CreateTime>%s</CreateTime>                    <MsgType><![CDATA[news]]></MsgType>                     <ArticleCount>1</ArticleCount>                     <Articles>                         <item>                             <Title><![CDATA[%s]]></Title>                              <Description><![CDATA[%s]]></Description>                             <PicUrl><![CDATA[%s]]></PicUrl>                             <Url><![CDATA[%s]]></Url>                         </item>                                             </Articles>                     <FuncFlag>1</FuncFlag>                 </xml>";                 $resultStr = sprintf($textTpl, $postObj->FromUserName, $postObj->ToUserName, time(),$_ROW['ess_Title'],$_ROW['ess_Description'],$_ROW['ess_PictureUrl'],$_ROW['ess_Url']);                return $resultStr;    }  

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。