好久没有用原生的php写过东西了,最近由于一个项目的原因要涉及到原生的php。直到现在才发现,连原始的语句都忘了,真是不敢说自己是学php的,丢人。(或许之前是因为一直在用框架,而框架都是将原生知识进行包装的,唉,好多东西都没有学透彻啊),现记录一些遇到的问题
php和html之间的相互嵌套:潜意识中只是觉得php嵌套在html中会有很多的单引号和双引号,但是一直没有系统地区分过。
(1)php中嵌入html标签:
<?php echo ‘<p>Hello World</p>‘; ?> //输出的只有html代码
echo "<tr>".$val."</tr>"; //html和php代码共同输出
$str=‘<tr>‘.$val.‘</tr>‘; echo $str; //先将要输出的内容赋给一个变量,然后再将变量输出
(2)在html中嵌入php
<input type="text" name="username" value="<?=$username?>"/> //以<?=?>的形式输出
<ul> <?php for($i=1;$i<=5;$i++){ ?> <li>Item No <?php echo $i; ?></li> <?php } </ul> //以混编的形式输出
在写sql语句的时候发现错误
例如:
$sql = "update user set `username`=$username,`password`=$password";
会提示Unknown column ‘yuanfang‘ in ‘field list‘
只是因为当username的类型是数字的时候,则插入的就是数字本身,而当username是char类型的时候,就是相当于
update user set `username`=yuanfang,`password`=abd了,这种自然和sql不符。原来小小的细节隐藏着这么大的玄机呢。学习啦,看来知识还是来源于细微之处。应该改为
$sql = "update user set `username`=‘$username‘,`password`=‘$password‘" 或者这种
$sql="INSERT INTO user(user,pass) values(‘".$user."‘,‘".$pass."‘)";
似乎上面的问题有好多都是关于‘ ‘和" "的区别的。然后我就再一步进行深入了解了单引号和双引号之间的区别:
(1)" "双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。‘ ‘单引号里面的不进行解释,直接输出。
例如:
- $abc=‘my name is tome‘;
- echo $abc //结果是:my name is tom
- echo ‘$abc‘ //结果是:$abc
- echo "$abc" //结果是:my name is tom
在使用单双引号的时候要特别小心,如下有几种情况要注意:
(1)在输出含有变量的字符串时:
$username = $_POST[‘username‘];
如果要输出这样的效果:
this is my name + 接收到的username,有如下两种写法:
- echo "this is my name $username"; //$username会自动解析
- echo ‘this is my name‘.$username;//使用单引号进行输出
(2)在使用sql语句的时候
由于sql语句都是要放在" "里面,但是一旦sql语句里面又有变量怎么办
- $sql = "select * from user where username=‘shine‘";//这是一种最为简单的方式
- $sql = "select * from user where username= ‘" .$abc. "‘ ";
上面这一句可以这么理解:
1."SELECT * FROM user WHERE username=‘ " 纯字符串
2. .连接符,用来链接后面的字符
3.$abc 显示变量的值
4.." ‘ "连字符链接后面的单引号(为了与条件中的第一个单引号配对)
其实不必这么复杂,可以这么写:$query="SELECT * FROM user WHERE username=‘$abc‘ ";
可以这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已.
(3)$query="SELECT * FROM user WHERE username=‘ " .$abc["name"]." ‘ "; //更为复杂的一种情形
第一次觉得小小的引号居然有这么大的用途。