CREATE TABLE #Branch (BranchName varchar(10), CustID int);
INSERT INTO #Branch
VALUES
('Branch1',1111),
('Branch1',1111),
('Branch1',2222),
('Branch2',2222),
('Branch2',4444),
('Branch3',1111),
('Branch4',3333);
WITH FirstCustomer AS(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY CustID ORDER BY BranchName) AS RN
FROM #Branch),
Branches AS ( --really you should have a seperate table to store your branches in
SELECT DISTINCT BranchName
FROM #Branch)
SELECT B.BranchName,
COUNT(FC.CustID) AS Customers
FROM Branches B
LEFT JOIN FirstCustomer FC ON B.BranchName = FC.BranchName
AND FC.RN = 1
GROUP BY B.BranchName;
DROP TABLE #Branch;
我有一个页面需要输出echo http_response_code('400');
return "error";
状态
我设置http
&尝试使用邮递员发帖。
它总是返回200。
为什么http_response_code(400)
无效?
答案 0 :(得分:4)
也许你在调用http_response_code()之前已经发送了一些输出。 它会在没有警告的情况下静默导致HTTP 200 (它不会发出众所周知的标头已发送)。您可以发送一些输出,但不能超过php指令output_buffering
的值(请参阅您的phpinfo页面)。通常它设置为4096字节(4kB)。尝试将php.ini中的output_buffering
临时增加到更高的值(不要忘记重新启动webserver)。请注意,output_buffering
是PHP_INI_PERDIR
类型,无法在运行时更改,例如通过ini_set()。
PHP_INI_PERDIR: Entry can be set in php.ini, .htaccess, httpd.conf or .user.ini
我建议使用整数而不是字符串:http_response_code(400)
...只是为了与PHP文档保持一致。但是http_response_code()
也适用于字符串 - 我现在已经测试过了,所以字符串不会导致你的问题,因为@DiabloSteve在评论中表示。
答案 1 :(得分:2)
您不需要像以前那样返回函数:
return "error";
答案
您需要像这样退出功能:
http_response_code(400);
exit;
还有echo
和类似字符串的错误代码是多余的
答案 2 :(得分:1)
您需要像这样两次致电http_response_code
http_response_code(400); // this will get previous response code 200 and set a new one to 400
echo http_response_code(); // this will get previous response code which is now 400
return;
答案 3 :(得分:0)
之所以会收到200持久的响应代码,是因为在拥有php标签之前,您需要进行一些输入(换行符):
第1行 2号线
,这也可以在php标签之间:
1行 2号线
请确保删除这些输入,否则这些换行符将被视为输出。这就是为什么您之后输入的任何http_response_code(xxx)都没有影响的原因,因为换行符输出表示“ 200 ok”响应。我已经用r-client模拟了您的问题(应该与chrome上的邮递员相同)。
答案 4 :(得分:0)
在我的情况下是
<pre>
<?php
http_response_code(404);
?>
</pre>
此代码返回200,因为在PHP启动之前,已经发送了 pre 标记
<?php
http_response_code(404);
成功返回404,因为尚未发送任何内容。
在 <?php 之前不允许有空格,否则将返回200