举例1 单引号无法处理变量
<?php header('Content-type:text/html;charset=utf-8'); //设置页面编码 $content = "hello php"; echo "$content"; echo "<br>"; echo '<br>'; echo '$content'; echo '<br>'; echo "what's my name?<br>"; //最简单的写法,单引号和双引号不产生冲突(conflict) echo 'what\' my name?<br>'; //用斜杠转义 echo 'what\ts my name? <br>'; //无法处理转义字符,原样输出 echo "我\"是\\'中国人";//关于转义字符,多说一句 比如我们想输出: 我"是\'中国人 ?>
以上程序输出结果为
结论1:php里的单引号把内容当成纯文本,不会经过服务器翻译,php会在双引号包围的字符串中搜寻变量。用单引号代替双引号来包含字符串内容,这样做会更快一些。
另外 echo “<br>”; echo ‘<br>’; 效果相同
结论2:php中单引号不能处理转义字符(除了\\和\'这两个)以外,\n也不行。
举例2 如何输出含有变量的字符串
现在要输出this is your email $email; 可以有两种方式
$email=$_POST['email']; echo "this is your email $email"; //双引号服务器会自动解析 echo 'this is your email'.$email; //用连字符和纯字符串和变量链接起来
常见的用途是建立大块的HTML字串代码,赋值号 (=) 连接符 (.) 可以被简写合并为 (.=) 符,ecshop中有如下例子
$sql .= "AND g.cat_id " . db_create_in($id_list);
举例3 SQL语句的写法
SELECE * FROM email_table WHERE username="abc";
查询的条件是常量时,php中可以写成
$query="SELECE * FROM email_table WHERE username='abc'";//query语句一定要用双引号括起来
查询的条件是变量时,如$abc=$_POST['username'];php中可以写成
$query="SELECT * FROM email_table WHERE username=' ".$abc." ' ";
可以分成几步理解:
①"SELECT * FROM email_table WHERE username=' " 纯字符串
② .连接符,用来链接后面的字符
③$abc 显示变量的值
④." ' "连字符链接后面的单引号(为了与条件中的第一个单引号配对)
其实不必这么复杂,可以这么写
$query="SELECT * FROM email_table WHERE username='$abc' ";
可以这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已,而$abc会被当作变量解析。
如果复杂一点,$abc为数组变量,则写成
$abc=array("name"=>$_POST['username'],"age"=>$_POST['age']); $query="SELECT * FROM email_table WHERE username=' " .$abc["name"]." ' ";
这样的写法可以按之前的那④个步骤就很容易理解了。
以下是从ecshop的flow.php文件中copy出来的么几个sql语句,可以看看写法。
$sql = "SELECT a.attr_id, a.attr_name, a.attr_type, ". "g.goods_attr_id, g.attr_value, g.attr_price " . 'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' . 'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' . "WHERE a.attr_type != 0 AND g.goods_id = '" . $goods->goods_id . "' " . 'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id'; /* 检查是否有赠品 */ $sql = "SELECT COUNT(*) FROM " . $ecs->table('cart') . " WHERE session_id = '" . SESS_ID . "' AND is_gift > 0";