$result = mysql_query($sql, $link) // クエリ文を実行します
$res=array()
while($row = mysql_fetch_array() $result)){
if(condition){
$res[] = $row["title"].$row["answer"]
}
}
return $ res;
?>
これを使用すると、PHP は正しいですが、WeChat を受信すると、別の返信配列になります
ディスカッション (解決策) に返信
データを文字列に連結するか、json にエンコードします
return json_encode($ res) ;
return json_encode($res);
これも機能しません、返信は文字化けします
誰か知っていますかそれをマスターするには?
echo json_encode の前に、 header('Content-type:application/json;charset=utf-8');
echo json_encode の前に追加します。 : header( 'Content-type:application/json;charset=utf-8');
$sql = "select * FROM `record` WHERE title like '%$keyword%'"; $ result = mysql_query($ sql、$ link); mysql_close($link);
} 今回返される値は、echo の []
です。 json_encode の前に、header('Content-type:application/json;charset=utf-8) を追加します。 ');
これはエラーですか?
FromUserName>
%s
< CDATA[%s]]>
0
を追加します: header('Content-type:application/json ;charset=utf-8');
$sql = 「select * FROM `record` WHERE title like '%$keyword%'";
$result = mysql_query($sql, $link); // 执行句询语
$res=array();
while($row = mysql_fetch_array($result))
{
$res[]=$row["title"];
header('Content-type:application/json;charset=utf-8');
return json_encode($res);
mysql_close($link);
} 次の返還は[]
返還は空ですか? 🎜> echo json_encodeの前,加上:header('Content-type:application/json;charset=utf-8');
会わないのはこれですか?
%s
<コンテンツ>コンテンツ>
0 は、
0 を削除します。
在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');
$sql = 「select * FROM `record` WHERE title like '%$keyword%'";
$result = mysql_query($sql, $link); // 执行句询语
$res=array();
while($row = mysql_fetch_array($result))
{
$res[]=$row["title"];
header('Content-type:application/json;charset=utf-8');
return json_encode($res);
mysql_close($link);
} 次の戻り値は[]
戻り値は空ですか?
申し訳ありませんが、今間違ったコメントをしてしまいました。
何が間違っているのか全く分かりません
/**
* wechat php テスト
*/
// トークンを定義します
function chaxun($keyword){
$dbname = 'app_yqweixiaoxi';
//$host = getenv('HTTP_BAE_ENV_ADDR_SQL_IP'); > // $port = getenv('HTTP_BAE_ENV_ADDR_SQL_PORT');
//$user = getenv('HTTP_BAE_ENV_AK')
//$pwd = getenv('HTTP_BAE_ENV_SK');
mysql_connect() サーバーに接続します*/
$link = mysql_connect ( SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT, SAE_MYSQL_USER, SAE_MYSQL_PASS );
if(!$link) {
die("サーバーの接続に失敗しました: " .mysql_error($link));
}
/*接続が成功した直後に mysql_select_db() を呼び出し、接続するデータベースを選択します*/
if(!mysql_select_db($dbname,$link) )
{
die("データベースの選択に失敗しました: " .mysql_error($link))
}
mysql_query("set names GBK",$link); 🎜>$sql = "select * FROM `record` WHERE title like '%$keyword%'";
$result = mysql_query($sql, $link) // クエリ文を実行します
$res=array ();
while( $row = mysql_fetch_array($result))
🎜> header('Content-type:application/json;charset=utf -8');
return json_encode($res); ;
mysql_close($link); >define("TOKEN", "YQweixiaoxi");
$wechatObj->responseMsg(); >
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET ["echostr"]
//有効な署名、オプション
if($this->checkSignature()){
echo $echoStr;
exit; exit
}
}
public function responseMsg()
{
//投稿データを取得します。環境が異なる可能性があります。
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]
//投稿データを抽出します
if (!empty($postStr) )){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName;時間(); $textTpl = "
%s
<[CDATA[%s]]>
if(!empty($keyword ))
{
$msgType = "text";
$contentStr= chaxun($keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "何かを入力してください...";
}
}else {
echo "";
終了します。
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = トークン;
$tmpArr = array($token, $timestamp, $nonce);
ソート($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>
在echo json_encode之前,加上:header('Content-type:application/json;charset=utf- 8');
$sql = 「select * FROM `record` WHERE title like '%$keyword%'";
$result = mysql_query($sql, $link); // 执行句询语
$res=array();
while($row = mysql_fetch_array($result))
{
$res[]=$row["title"];
header('Content-type:application/json;charset=utf-8');
return json_encode($res);
mysql_close($link);
} 次の戻り値は[]
戻り値は空ですか?
在echo json_encode之前,加上:header('Content-type:application/json;charset=utf-8');
$sql = 「select * FROM `record` WHERE title like '%$keyword%'";
$result = mysql_query($sql, $link); // 执行句询语
$res=array();
while($row = mysql_fetch_array($result))
{
$res[]=$row["title"];
header('Content-type:application/json;charset=utf-8');
return json_encode($res);
mysql_close($link);
} 次の戻り値は[]
戻り値は空ですか?
数据库的是这样的
你的表字段是UTF-8,所以应该 mysql_query("set names utf8",$link);
另外,有个地方稍微改下(改不改都行,不过echo的数据都应该是XML格式的):
if(!empty($keyword )){ $msgType = "text"; $contentStr = chaxun($keyword); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;}else{ $msgType = "text"; $contentStr = "input something..."; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;}
ログイン後にコピー
ログイン後にコピー
你的表字段是UTF-8,所以应该 mysql_query("set names utf8",$link);
另外,有个地方稍微改下(改不改都行,不过echo的数据都应该是XML格式的):
if(!empty($keyword )){ $msgType = "text"; $contentStr = chaxun($keyword); $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;}else{ $msgType = "text"; $contentStr = "input something..."; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr;}
ログイン後にコピー
ログイン後にコピー
都改了,还是不行,烦死了,用return返回array,用echo 回复公众号暂停服务
1、你是在做微信应用,而微信都是 utf-8 编码的
所以你 mysql_query("set names GBK",$link); 是不对的
要 mysql_query("set names utf8",$link);
2、你把传入的 utf-8 数据 $keyword 当做 gbk 解释
这就造成了 chaxun 函数返回空数组
当然确实不存在的时候,也是返回空数组的
3、由
$contentStr= chaxun($keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
可知,$contentStr 应是一个字符串,而 chaxun 返回的是数组,所以可能需要
$contentStr = json_encode(chaxun($keyword));
或
$contentStr = join(',', chaxun($keyword));
1、用echo 回复公众号暂停服务====》可能是代码有语法错误或者error,在你的域名里运行这个脚本看看有没有报错。
2、试一下,不进行查找数据库,直接让$contentStr = "字符串";然后echo $resultStr; 看看是不是数据取出问题
1、用echo 回复公众号暂停服务====》可能是代码有语法错误或者error,在你的域名里运行这个脚本看看有没有报错。
2、试一下,不进行查找数据库,直接让$contentStr = "字符串";然后echo $resultStr; 看看是不是数据取出问题
问题解决了,谢谢你,大师傅
1、你是在做微信应用,而微信都是 utf-8 编码的
所以你 mysql_query("set names GBK",$link); 是不对的
要 mysql_query("set names utf8",$link);
2、你把传入的 utf-8 数据 $keyword 当做 gbk 解释
这就造成了 chaxun 函数返回空数组
当然确实不存在的时候,也是返回空数组的
3、由
$contentStr= chaxun($keyword);
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
可知,$contentStr 应是一个字符串,而 chaxun 返回的是数组,所以可能需要
$contentStr = json_encode(chaxun($keyword));
或
$contentStr = join(',', chaxun($keyword));
大师啊,大师啊,解决了,佩服啊
太感谢了