mysql向表中某字段后追加一段字符串 update table_name set field=CONCAT(field,',str') mysql 向表中某字段前加字符串 update table_name set field=CONCAT('str',field) mysql 向表中某字段相加数字字段值 update table_name set field=field+$number
MYSQL 在字段里现有内容后面添加字符串 更新一个字段,在它的后面加一个字符串,不查询数据库得到这个字段值 怎么添加?? 我的test表,有个user字段,我现在想在它后面加了另一个用户的名字 我在mysql数据库这样写 UPDATE test SET user= user+ ',phpchina' WHERE id= '2'; 这样是不对的,mysql数据库把它当成数字相加了,user字段值变成空了。 应该: UPDATE test SET user= CONCAT(user,',phpchina') WHERE id= '2';
即:"+"只适合整数相加,不适合字符串。 附:两个MySQL字符串函数: (1) CONCAT(str1,str2,...) 返回结果为将参数相连后得到的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型。 (2)CONCAT_WS() update friend set cname=CONCAT_WS('.',cname,'wang') where id=1(字段cname原值为'Rick') 输出结果为Rick.wang.注意,第一个参数为连接两个字符串的字符.
#1464
#1465
《军语》中的解释如下: 战术指进行战斗的方法。包括战斗基本原则以及兵力部署、战斗指挥、协同动作、战斗行动的方法和各种保障措施等内容。 战略亦称军事战略。筹划和指导战争全局的方略。按作战类型和性质,分为进攻战略和防御战略。在军事战略下一层次,还可分为菌种战略和战区战略等。泛指对全局性、高层次的重大问题的筹划与指导。如国家战略、国家战略、经济发展战略等。 两者最大的区别就是层次的高低不同,战术是低层面小范围的,战略是国家层面大范围的。 战术可以千变万化 释义:战略是方向,战术是:方法战略上藐视敌人,战术上重视敌人,是伟大领袖毛泽东主席的战略战术思想,是克敌制胜不可分割的两个方面。所谓战略是比喻决定全局的策略;战术是比喻解决局部问题的方法;所谓敌人指真正的敌人,也可以指工作中遇到的困难和障碍。如洪水,如体育比赛中的对手。在战略上藐视敌人,才能敢于和敌人做斗争;才能保持旺盛的斗志,百折不挠,一往直前;才能在暂时处于困难的条件下,不被敌人外强中干的现象所迷惑,不至过高估计敌人而悲观失望、停顿不前。
在战术上重视敌人,是克敌制胜的现实保证。只有在战术上重视敌人,才能不至过低估计敌人而产生麻痹轻敌思想;才能在每一个具体的斗争中,采取谨慎态度,讲究斗争艺术;才能保持清醒的头脑,不至鲁莽蛮干,毕其功于一役。毛泽东曾指出:“当着我们正确地指出在全体上,在战略上,应当轻视敌人的时候,却决不可在每一个局部上,在每一个具体问题上,也轻视敌人。
“战略上藐视敌人,战术上重视敌人”,指导中国人民取得了抗日战争、解放战争、抗美援朝的胜利。这一思想对我们今天的经济建设,对我们各行各业工作的开展以及对我们每一个人战胜一切艰难困苦都有着积极的意义。
比如对于下棋,“在战略上要蔑视敌人,在战术上要重视敌人”这两句话也是最最重要的。在战略上要蔑视敌人,要对自己有信心,知道自己的能力层级,在你的目标范围之上,假如你目标几年内要拿全国冠军,可能没有任何事实支持,但是你会有一个参照系,即你们一拨人中所获得的头衔,所取得的成绩,所经受的重大比赛的考验后取得的突破,比比他们就会有一种感觉,那就是我不比任何人差或者说,只差一点点。对自己来说,就有充足的信心,它是支持你前进的动力。
战术上重视敌人。比如说你的大的目标是能够实现的,并不代表你能够坐享其成,也不是能轻而易举的完成的,在日常一点一滴的积累当中,每下一盘棋,每打一个谱,每做一道死活,一点一滴积累起来你自己的信心和你自己的水平。你可以有一两天的懈怠,但是不能经常懈怠,应该时刻都以一个旁观者的角度来观察自己,观察自己在你们一拨人当中的状态,别人平时都是怎么训练的。要看进步快速人的训练状态还有自己的训练状态,一对比就觉得自己有一种时不我待的感觉,就有了压力,压力会变成动力。不要惧怕失败,再怎么高要求自己,也可能会有失误,特别是下棋,两个人坐下来,总有一人要输的,这都是非常正常的,要找出失误当中的经验教训,不断用自己过去的成败总结这是为什么,出现这些问题是为什么,我今天取得好成绩是为什么,不断从过去的经验当中找出自己前进的道路,找出自己的不足,把它弥补,找出自己的优点把它发扬,这样一点一点修正自己,最后达到你想要的目的。对于具体的比赛,也要在战略上藐视(轻视,小看)对手,毛泽东面对美帝国主义那么强大的敌人,他说:一切反动派都是纸老虎。这是为自己树立必胜的信心。但在战术上要重视,那怕是棋力相对弱的对手也要高度重视,以弱胜强的事例太多太多了。每一局,每一步都不可掉以轻心,麻痹大意。这样才能立于不败之地
意见和建议区别
意见是带有批评性、指正性的看法,且大都是对已经发生的事物而言,多有希望对方改正的意思。
建议是带有建设性、前瞻性的看法,且大都是对尚未发生的事物而言,多有希望对方采纳并实施的意思,但实施的效果则要看事实而论了。
代表准确地运用提出议案或者提出建议、批评和意见的方式行使代表职权、发挥代表作用,需要清楚地认识议案与建议、批评和意见的区别。
#1466
#1467
一句话概括:欺诈式营销、教学落后、师资低端
一 成因:高校教育的落后
重点高校:希望能培养出研究生、博士。所以对于实践并不重视,近几年由于压力所致,加强了实践能力的培养,但由于师资力量所限,并没有能教实践的老师,就程序员的高工资而言,实再没必要做老师,而且学历也不够学校要求。因此也没法很好的教实践。 同时,教授在学校期间教学工作理论不是重点,教授主要做科研,理论不和实践相结合会非常空洞。
普通高校:其教学体系主要由重点高校培养。而且面临着就业的压力,所以会侧重实践,同时,理论也会教一点,同样,他们呢也不太擅长理论。但实践仅凭自身又教不好。 因此,学校的学习体系已经无法满足社会需求
培训机构:只实践,因为需要就业,没时间培养理论。就业就行了,以后会怎么样?看天喽
二 培训机构之七宗罪
1 销售第一,不择手段
销售费占比超过 40%,最常见的两种招生模式:校企合作、招转
校企合作的本质是“各取所需”,举个例子,某培训机构和学校达成协议,每招生成功一名赠送学校一台 Mac 电脑,这还算好的,起码校长是为了学校利益着想,更有甚者公报私囊的大有人在。校园里琳琳色色的讲座实际上也大量存在利益输送。
招转 以就业为名,行招生之实。常见的套路是招聘网站上发招聘贴,你去了就变成岗前培训。最后能否就业?天知道。
2 教师收入低,人员素质整体低下
初级讲师月薪不超过 1w,培训保证月薪 1W 的学员? are you kidding ? 你胆敢参加吗?
3 生源低端 大专?没关系,专业学文科的,没关系。只要你敢来,我就敢收。计算机并不是一个简单的学科,具有一定门槛,一个小 Bug 都可能牵扯到底层的实现,缺乏了理论基础,只是空中楼阁而已。
4 过度包装 甭管是否教的好,先包装出来再说。
IT 最关键的就是实践,是项目,为什么有人在学校是一条虫,但公司里立马就 nb 了?就是因为在公司有项目的磨练。
但在培训机构,实战基本不做,把市面上最火的框架技术包装给你,背下来再说,而后教你话术:“千万别说你是培训机构出来的” “哥,我已经拿到几个 offer 了,但是对你们公司特别向往...”。
如果招聘公司发现你是培训机构出来的,基本会 PASS 掉。
5 浪费的不仅仅是金钱,而是更宝贵的时间
4 个月 2W,但之后呢?你是不是要在这个领域干很长时间?即使你被拔苗助长的找到了工作,工作 3 年、5 年、8 年后发现自己并不适合这个行当,岁月已老,转行无望,空余愤恨。
6 教学低端,无用 都什么年代了,还是填鸭式教学,输入为主,很少输出,但是 IT 是个重实践的行当,你不做大量的项目,没有一定的输出,没法成为一个称职的码农。
7 作恶 让刚毕业的学生提早见识了社会的阴暗面。教育的目的是培养具备优良价值观的人,百年育才,一个歪曲的行业给社会输出歪曲的价值观,说毒瘤也不为过。
第五条反对,为什么呢,首先,那些因为程序员工资高而培训进来的的,这种人渣只会扰乱市场,他们只会往上爬,不会关注底层,这种人在怎么提升也只是一个搬运工或者码农,
就说说那些真心想做这行的,之前可能你并没有任何工作经验,但是对这个行业特别渴望,想快速提升一下自己,培训无疑是最好的选择,即使最后工资低等,其实并不重要,因为在入职之后会把大学的课程学一遍,首先你要有工作啊,低姿态。。低姿态。。低姿态。。低姿态。。
没有那么多培训出来的,怎么体现高端人才的价值
#1468
#1469
修道一生,悟法一世。换来万古无敌,尸横遍野。飞蛾扑火的执着,风烛最后的绚烂。悟得世间无双法,却抵不过逝水流年。一世极致绚烂,掩不住斑驳泪血昔年。再回首举世皆寂,寻不到同年。
#1470
转化:这是一个问题,但关键还是在于百雀羚做这个广告的初衷,如果只是宣传,增加产品的曝光度,那么这是一则很成功的案例。但如果是为了实际的转化率,则可以说是一则比较失败的成功案例。
#1471
加\u000d 或者\r <script language="JavaScript"> confirm("abcdef\u000d123456") </script>#1472
甲方而言,无论广告、PR都是刀,要有刀的锋利和效果
而乙方,我就不评论了……
#1473
#1474
“三棵树”再往前30米这样右拐有条小路是到考试基地的,旁边也有指示牌。
名称:南宁支队桂骏科目一考场(新)
地址:南宁市兴宁区昆仑大道那沙坡那零山
电话:0771-4733826
凡是题目中没有说是在高速路上,而行驶有麻烦的都是选30公里,如果是高速路,题目中有“能见度小于200米”,答案就选60公里,同样的,看到“能见度小于100米”就选“50米”,“能见度小于50米”就选“20公里”。
吊二撤三醉五逃终生
《道路交通安全法实施条例》第七十八条:同方向有2条车道的,左侧车道的最低车速为每小时100公里;同方向有3条以上车道的,最左侧车道的最低车速为每小时110公里,中间车道的最低车速为每小时90公里。道路限速标志标明的车速与上述车道行驶车速的规定不一致的,技照道路限速标志标明的车速行驶。
《公安部令第123号》第四十八条:机动车驾驶人应当于机动车驾驶证有效期满前九十日内,向机动车驾驶证核发地车辆管理所申请换证。
间断轻踏,给刹车片一些温度可以蒸发一些水,恢复制动。
《道路交通安全法实施条例》第七十八条:高速公路应当标明车道的行驶速度,最高车速不得超过每小时120公里,最低车速不得低于每小时60公里。
在高速公路上行驶的小型载客汽车最高车速不得超过每小时120公里,其他机动车不得超过每小时100公里,摩托车不得超过每小时80公里。 同方向有2条车道的,左侧车道的最低车速为每小时100公里;同方向有3条以上车道的,最左侧车道的最低车速为每小时110公里,中间车道的最低车速为每小时90公里。道路限速标志标明的车速与上述车道行驶车速的规定不一致的,按照道路限速标志标明的车速行驶。图中车在同方向车道为左车道,所以最低车速为每小时100公里。
5年不得申请是说的醉酒驾驶但没有造成事故的,造成了重大交通事故的就是终身了
前雾灯点亮雾在左边是前雾灯,雾在右边是后雾灯。
三个先行原则:转弯的机动车让直行的车辆先行,右方道路来车先行,右转弯车让左转弯车先行。我方为右转,对方左转,故对方优先通过。
右转变车辆有通过权,但是没有优先权,在十字路口相对方向的车辆右转弯车辆让左转弯车辆先行才能不会造成路口交通的阻塞。试想一下,假如左转弯车辆停车让行右转弯车辆了,会造成各高车辆都要停车。 不过还有一道题,在十字路口要让右方来车先行,这是规矩。
初次申领的机动车驾驶证的有效期为6年,每个记分周期均未达到12分的,换发10年。
《道路交通安全法实施条例》第四十六条: 机动车行驶中遇到掉头、转弯、下陡坡时最高行驶速度不得超过每小时30公里。
吊销机动车证的为二年,撤消机动车证的为三年,以醉酒吊销五年,因逃跑而吊销是终身,叫“吊二撤三醉五逃终身”
实线的是港湾式停靠站,写“公交车”3个字的是公交车停靠站。
此图为BRT车辆专用车道,与公交车专用车道的区别是多了“快速公交”四个字。(快速公交,是英文Bus Rapid Transit的词义翻译(简称:BRT),这是一种高质量的,快速舒适、低成本、灵活便捷的新型城市公交交通方式。它介于轨道交通与常规公交之间,利用现代技术使传统的公交系统达到轨道交通的服务水平。 )
《道路交通安全法实施条例》第四十六条: 机动车行驶中遇到进出非机动车道,通过铁路道口、急弯路、窄路、窄桥时最高行驶速度不得超过每小时30公里。
《公安部令第123号》第六十二条:年龄在60周岁以上的机动车驾驶人,应当每年进行一次身体检查,在记分周期结束后三十日内,提交县级或者部队团级以上医疗机构出具的有关身体条件的证明。
《道路交通安全法实施条例》第四十五条: 机动车在道路上行驶不得超过限速标志、标线标明的速度。在没有限速标志、标线的道路上,机动车不得超过下列最高行驶速度: (一)没有道路中心线的道路,城市道路为每小时30公里,公路为每小时40公里; (二)同方向只有1条机动车道的道路,城市道路为每小时50公里,公路为每小时70公里。
《道路交通安全法实施条例》第四十六条: 机动车行驶中在冰雪、泥泞的道路上行驶时最高行驶速度不得超过每小时30公里。
用虚假信息的一年内不得重新申请驾驶许可;以欺骗、贿赂等不正当手段取得驾驶证被依法撤销的三年内不得重新申请驾驶许可
图中P为停车地方,上网喝茶为服务区,停车服务区简称停车区。停车场没有喝茶上网的。因此为“高速公路停车区预告”。
此标志列出各种服务的图片,因此为服务区。
∧表示俩侧通行,/这个方向的表示左侧通行,\这个方向表示右侧通行。此题记忆方法,顺着如图方向标记了红色代表不通,只能从另外一侧通行。
反向弯路是“z”
《公安部令第123号》第四十九条:机动车驾驶人户籍迁出原车辆管理所管辖区的,应当向迁入地车辆管理所申请换证。机动车驾驶人在核发地车辆管理所管辖区以外居住的,可以向居住地车辆管理所申请换证。申请时应当填写申请表,并提交第四十八条:规定的证明、凭证。
好像有两种颜色 白和黄虚 白的好像是车道连接线吧?路口导向线
《道路交通安全法》第一百条:驾驶拼装的机动车或者已达到报废标准的机动车上道路行驶的,公安机关交通管理部门应当予以收缴,强制报废。 对驾驶前款所列机动车上道路行驶的驾驶人,处200元以上2000元以下罚款,并吊销机动车驾驶证
虚线禁止长时停车;实线禁止停车。
白色的是最低限速,黄色的是最高限速。
#1475
update table_name set field=CONCAT(field,',str')
mysql 向表中某字段前加字符串
update table_name set field=CONCAT('str',field)
mysql 向表中某字段相加数字字段值
update table_name set field=field+$number
#1476
更新一个字段,在它的后面加一个字符串,不查询数据库得到这个字段值 怎么添加??
我的test表,有个user字段,我现在想在它后面加了另一个用户的名字
我在mysql数据库这样写
UPDATE test SET user= user+ ',phpchina' WHERE id= '2';
这样是不对的,mysql数据库把它当成数字相加了,user字段值变成空了。
应该:
UPDATE test SET user= CONCAT(user,',phpchina') WHERE id= '2';
即:"+"只适合整数相加,不适合字符串。
附:两个MySQL字符串函数:
(1) CONCAT(str1,str2,...)
返回结果为将参数相连后得到的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型。
(2)CONCAT_WS()
update friend set cname=CONCAT_WS('.',cname,'wang') where id=1(字段cname原值为'Rick')
输出结果为Rick.wang.注意,第一个参数为连接两个字符串的字符.
#1477
对于锚点的平滑跳转,在一般的商业性质的网站上,权衡来说,要谨慎使用。
例如:让页面平滑滚动到一个id为box的元素处,则JQuery代码只要一句话,如下:
$(“html,body”).animate({scrollTop:$(“#box”).offset().top},1000)其中animate为JQuery的自定义动画方法,$(“#box”).offset().top表示id为box的JQuery对象距离页面顶部的偏移值,1000表示平滑动画执行的时间为1000毫秒,也就是1秒。
4.IE下锚点刷新失效及JQuery下的解决
【1】关于锚点刷新失效
锚点刷新失效就是指当按下刷新键F5时,即使此时URL的后面就随锚点,此锚点也是不起作用的。
【2】在JQuery中,不难实现。可以根据URL获取锚点,从而进一步获得对应锚点对象,然后再让页面的滚动高度为其距离页面顶部的偏移值就可以了。使得页面无论是重新载入还是其刷新,其后面的锚点都起作用。
其js代码如下:
$(function(){ var url = window.location.toString(); var id = url.split(“#”)[1]; if(id){ var t = $(“#”+id).offset().top; $(window).scrollTop(t); } });jQuery获得子元素个数的方法
//获取id=div1下的子元素的个数 $('#div1').children().length; //获取id=div1下的span元素个数 $('#div1').children('span').length;#1478
1, window.location.href-----------整个URl字符串(在浏览器中就是完整的地址栏)
本例返回值: http://www.caibaojian.com:80/fisker/post/0703/window.location.html?ver=1.0&id=6#imhere
2,window.location.protocol---------URL 的协议部分
本例返回值:http:
3,window.location.host----------URL 的主机部分
本例返回值:www.caibaojian.com
4,window.location.port-----URL 的端口部分
如果采用默认的80端口(update:即使添加了:80),那么返回值并不是默认的80而是空字符
本例返回值:""
5,window.location.pathname(URL 的路径部分(就是文件地址))
本例返回值:/fisker/post/0703/window.location.html
6,window.location.search-------查询(参数)部分
除了给动态语言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值
本例返回值:?ver=1.0&id=6
7,window.location.hash-------锚点
本例返回值:#imhere
#1479
支持给动态元素和属性绑定事件的是live和on,其中live在JQUERY 1.7之后就不推荐使用了。现在主要用on,使用on的时候也要注意,on前面的元素也必须在页面加载的时候就存在于dom里面。动态的元素或者样式等,可以放在on的第二个参数里面。
下面看下jquery on() 方法绑定动态元素
jQuery on()方法是官方推荐的绑定事件的一个方法。使用 on() 方法可以给将来动态创建的动态元素绑定指定的事件,例如append等。
<div id="test">
<div class="evt">evt1</div>
</div>
错误的用法,下面方法只为第一个class 为 evt 的div 绑定了click事件,使用append动态创建的div则没有绑定
<script>
// 先绑定事件再添加div
$('#test .evt').on('click', function() {alert($(this).text())});
$('#test').append('<div class="evt">evt2</div>');
</script>
正确的用法如下:
<script> $('body').on('click', '#test .evt', function() {alert($(this).text())}); $('#test').append('<div class="evt">evt2</div>'); </script>以上所述是小编给大家介绍的jQuery on()方法绑定动态元素的点击事件无响应的解决办法
codecode#1480
#1481
error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^ E_NOTICE);
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
在看帝国cms的connect.php是发现第一句是error_reporting(E_ALL ^ E_NOTICE);以前也没注意过这个语句,知道是设置错误提示的,但不清楚具体怎样设置使用。下面从网上摘抄了些东西,总结了一下。
举例说明:
在Windows环境下:原本在php4.3.0中运行正常的程序,在4.3.1中为何多处报错,大体提示为:Notice:Undefined varialbe:变量名称.
例如有如下的代码:
if (!$tmp_i) { $tmp_i=10; }在4.3.0中运行正常,在4.3.1中运行会提示Notice:Undefined varialbe:tmp_i
问题下下:
1.问题出在哪里?
2.应如何修改这段代码?
3.不改段代码,如何修改php.ini中的设置使原来在4.3.0中的程序在4.3.1的环境下运行正常?而不出现这个错误提示.
解决办法:
在程序开头加一句:
error_reporting(E_ALL & ~E_NOTICE); 或error_reporting(E_ALL ^ E_NOTICE);或者
修改php.ini
error_reporting = E_ALL & ~E_NOTICE有关error_reporting()函数:
error_reporting() 设置 PHP 的报错级别并返回当前级别。
; 错误报告是按位的。或者将数字加起来得到想要的错误报告等级。
; E_ALL - 所有的错误和警告 ; E_ERROR - 致命性运行时错 ; E_WARNING - 运行时警告(非致命性错) ; E_PARSE - 编译时解析错误 ; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的, ;也可能是有意的行为造成的。(如:基于未初始化的变量自动初始化为一个 ;空字符串的事实而使用一个未初始化的变量) ; E_CORE_ERROR - 发生于PHP启动时初始化过程中的致命错误 ; E_CORE_WARNING - 发生于PHP启动时初始化过程中的警告(非致命性错) ; E_COMPILE_ERROR - 编译时致命性错 ; E_COMPILE_WARNING - 编译时警告(非致命性错) ; E_USER_ERROR - 用户产生的出错消息 ; E_USER_WARNING - 用户产生的警告消息 ; E_USER_NOTICE - 用户产生的提醒消息使用方法:
error_reporting(0);//禁用错误报告 error_reporting(E_ALL ^ E_NOTICE);//显示除去 E_NOTICE 之外的所有错误信息 error_reporting(E_ALL^E_WARNING^E_NOTICE);//显示除去E_WARNING E_NOTICE 之外的所有错误信息 error_reporting(E_ERROR | E_WARNING | E_PARSE);//显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。error_reporting(E_ALL);//显示所有错误php中error_reporting(E_ERROR | E_WARNING | E_PARSE);是什么意思?
php中error_reporting(E_ERROR | E_WARNING | E_PARSE);是什么意思?
开启这3类错误信息的报告捏:Error一般是严重错误,Warning是些警告类的提示错误,Parse是语法解析方面的错误吧?具体查下文档吧。
至于|这个二进制位的运算符的含义你想象成并且的意思吧,就是这三类加在一起都要。
因为计算机中经常喜欢用比特位来记录某个样式风格,比如一个32位的整数,可以表示32个风格(windows程序开发中窗体风格里就用到)。
比如我要用:
0000 0000 0000 0000 0000 0000 0000 0001 ---------->表示E_ERROR这个符号
0000 0000 0000 0000 0000 0000 0000 0010 ---------->表示E_WARNING这个符号
0000 0000 0000 0000 0000 0000 0000 0100 ---------->表示E_PARSE这个符号
这样用|在一起
0000 0000 0000 0000 0000 0000 0000 0111表示三个的组合。
PHP syntax error, unexpected $end 错误的一种原因及解决
PHP 遇到 syntax error, unexpected $end 错误时,查错思路其实还是看看文件里 PHP 的开始标记和结束标记是否配对,还要额外注意注释里是否出现过 ?> 哟。
Parse error: syntax error, unexpected $end in script.php on line xx
调试了一会后发现产生错误的行是文件中间某行
//$str .= "?>\n";
想起来了 PHP 解释器允许的结尾标记那行还可以用单行注释,即 //$str .= "?>\n"; 被解释成结尾标记前有注释,注释的内容是 //$str .= ",而 ?> 后面的 \n"; 会被解释作 PHP 块外的内容按 HTML 输出出去!结果是给 $str .= "?>\n"; 这行添加 // 成注释后,反而多了个 ?> 的结束标记,造成原来真正的结束标记成了意料之外的(unexpected)了。
解决办法就是直接删掉这一行即可。
PHP 开始和结束标记所在行别写其它东西,是个好习惯。
#1482