举例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 "我\"是\\'中国人";//关于转义字符,多说一句 比如我们想输出: 我"是\'中国人
?>



以上程序输出结果为

echo 单引号 变量 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";