PDO连接数据库的三种方法

<?php

header('Content-Type:text/html;Charset=UTF-8');
try {
    //通过参数连接
    $dsn = 'mysql:host=127.0.0.1;dbname=test';
    $username = 'root';
    $passwd = '123456';
    //通过URI连接
    $dsn = 'uri:file://C:\dsn.ini'; //dsn.ini 的内容:mysql:host=127.0.0.1;dbname=test
    /*
     * 通过php.ini配置文件
     * php.ini配置中,任意处加上:
     * pdo.dsn.dsnname="mysql:host=127.0.0.1;dbname=test"
     */
    $dsn = 'dsnname';
    $PDO = new PDO($dsn, $username, $passwd);
    VAR_DUMP($PDO);
} catch (PDOException $e) {
    echo '出错啦:', $e->getMessage();
}

通过URI和PHP.INI配置的这2种方法可以隐藏数据库帐号信息,较安全,但并不是太方便。

win03无法同步时间

天南的一台Windows server 2003服务器上的时间跑得总是很快,而且手动/自动同步时,总提示失败。以下是解决方案:

1、系统自带防火墙允许 UDP 123 端口;
2、服务器安全狗允许 UDP 123 端口;
3、本地安全策略,允许:任何IP地址到任何IP地址,UDP协议,从任意端口到此端口123;
4、Windows Time 服务自动启动,且使用本地系统帐户登陆;
5、以上操作若还是无法同步,请将本地时间更改为北京时间最近的(天南的服务器比北京时间快了3分钟,同步都是失败的,所以尽量减小本地时间与北京时间的误差),然后从下拉列表中选择其它地址同步即可。

Can’t use method return value in write context

今天维护项目时,将本地代码上传至服务器测试后抛错:Can’t use method return value in write context 。查看出错源码是这样的:if(empty($this->_get(‘p’))){…}

empty是语言结构,老版PHP是不支持将函数返回值做为语言结构的参数的,但新版的PHP却可以(天南的PHP5.5.13)。

Linux下安装JDK

1、下载最新版的Linux版的SDK,天南下载的是:jdk-8u5-linux-i586.tar.gz ;
2、$tar -zxvf jdk-8u5-linux-i586.tar.gz
3、cp -rv jdk1.8.0_05   /usr/lib/
4、$vi  ~/.bash_profile  在文件末尾添加以下:

export JAVA_HOME=/usr/lib/jdk1.8.0_05
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

保存后执行:$source ~/.bash_profile  让配置生效;
5、最后写个demo类Demo.java,然后:
$javac Demo.java
$java Demo
测试是否正常。

PS:这种方式更安全,只有当前用户(.bash_profile所属者)能使用JDK。

Java操作XML之jdom的使用

Java操作XML,推荐使用jdom类库来操作,流程还是一样,下载JAR,然后加载到项目库中,接下来清理项目。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <stu id="1">
        <name>张无忌1号</name>
        <age>22</age>
    </stu>
    <stu id="2">
        <name>李楚楚1号</name>
        <age>18</age>
    </stu>
</root>

 


import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public class JdomStu {

    public static void main(String[] args) throws JDOMException, IOException {
//操作XML字符串
//         String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><stu id=\"1\"><name>张无忌</name><age>22</age></stu><stu id=\"2\"><name>李楚楚</name><age>18</age></stu></root>";
//        StringReader reader = new StringReader(xmlStr);
//        InputSource source = new InputSource(reader);
//        SAXBuilder saxBuilder = new SAXBuilder();
//        Document doc = saxBuilder.build(source);
        /**
         * 操作XML文件
         */
        SAXBuilder saxBuilder = new SAXBuilder();
        Document doc = saxBuilder.build(new File("src/demo.xml"));
        Element rootElement = doc.getRootElement();
        List nodeEles = rootElement.getChildren("stu");
        Element firstEle = (Element) nodeEles.get(0);
        System.out.println("获取第一个stu节点的id属性值:" + firstEle.getAttributeValue("id"));
        System.out.println("节点个数:" + nodeEles.size());
        for (Object nodeEle : nodeEles) {
            Element curEle = (Element) nodeEle;
            System.out.printf("ID:%d,姓名:%s,年龄:%d\n", Integer.parseInt(curEle.getAttributeValue("id")), curEle.getChildText("name"), Integer.parseInt(curEle.getChildText("age")));
        }

    }

}

 

Java操作Json之Gson的使用

Java中操作Json,主要还是借助一些Json类库,常见类库很多:Gson(谷歌)、fastjson(阿里巴巴)、Jackson Json、lib-json 等,个人还是偏向Gson,fastjson不太符合习惯且文档太少所以也没仔细去看。

先下载gson库(PS:目前访问谷歌相关网站很难,国情如此,没办法,大家可以去开源中国下载),因为偶用的是NB,所以打开项目 –> 右击“库”–> 添加JAR/文件夹 ,添加之后,清理项目即可。

import com.google.gson.Gson;

public class NewClass1 {

    public static void main(String[] args) {

        /**
         * Gson操作
         */
        Gson myJson = new Gson();
        User per1 = new User("张无忌", 22);
        User per2 = new User("张三丰", 100);
        //处理对象
        String jsonStr1 = myJson.toJson(per1);
        System.out.println("生成的json:" + jsonStr1);
        User result1 = myJson.fromJson(jsonStr1, User.class);
        System.out.println("解析json获取姓名:" + result1.name);
        //处理数组
        User[] pers = {per1, per2};
        String jsonStr2 = myJson.toJson(pers);
        System.out.println("生成的json:" + jsonStr2);
        User[] result2 = myJson.fromJson(jsonStr2, User[].class);
        System.out.println("解析json,并获取相应信息");
        for (User val : result2) {
            System.out.printf("\t姓名:%s,年龄:%d\n", val.name, val.age);
        }
    }

}

class User {

    String name;
    int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

}

 

 

PHP/Java运算符优先级问题

别笑,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高,利用括号可以改变运算优先级。没错吧?

public class Stu {

    public static void main(String[] args) {
        int a = 1, b = 2;
        a = b + (b = a) * 0;
        System.out.println(a + "--" + b);//2--1
    }

}

 

<?php

$a = 1;
$b = 2;
$a = $b + ($b = $a) * 0;
var_dump($a . '--' . $b); //1--1

$a = 1;
$b = 2;
$a = $b * 1 + ($b = $a) * 0;
var_dump($a . '--' . $b); //2--1

$a = 1;
$b = 2;
$a = (int) $b + ($b = $a) * 0;
var_dump($a . '--' . $b); //2--1

$a = 1;
$b = 2;
$a = ($b) + ($b = $a) * 0;
var_dump($a . '--' . $b); //1--1

JAVA和PHP对此类运算优先级处理方式不同?从两个程序的结果来看,让人真心纠结。难道不应该是先算括号里的,然后算乘法,再算加法,最后赋值??

最后还是纠结出来了,Java语言规范就是这么规定的!

交换两个变量的值

今天在CSDN里看到一贴,发现很多简单的东西,大伙都不愿意去尝试了,凭直觉,代码是正确的,但实际上,结果却不是我们想要的。

CSDN论坛原贴:http://bbs.csdn.net/topics/390818478
楼主是这样说的:

试一下能不能看懂:交换两个数的和:
$i=1;
$n=2;

// 经典算法!
$n=$i+($i=$n)*0;
// 算法二
$i=$n+$i;
$n=$i-$n;
$i=$i-$n;
// 算法三
$tem=$i;
$i=$n;
$n=$tem;
// 算法四(方法)
function swapValue(&$a,&$b){
     $tem=$a;
     $a=$b;
     $b=$tem;
}
swapValue($i,$n);

初看,嗯,的确是这么回事,但是细看,貌似楼主没弄清运算符的优先级。

<?php

$a = 1;
$b = 2;
//方法一
$b = ($a) * 1 + ($a = $b) * 0; //正确
//$b = $a+ ($a = $b) * 0; //错误,原因是先算 ($a = $b) * 0 的值,这样$a的新值就是原先的$b的值,而最终结果就是 $a==$b==2
var_dump($a . '--' . $b);

 

php获取其它页面中的变量

如题,PHP中获取其它PHP页面中的变量,咋一看,这需求太粗暴了。如果单纯的include或require,那么被包含页面中可能存在echo,header等函数,会影响当前页面的显示。正常情况下,页面间的变量传递可借助session/cookie等,不过这种方式需要页面间的转跳。如果不希望在页面间跳转并实现变量共用,那只能动些小手脚了。

<?php

$a = array(1, 'abc', 'hello');
//header('Location:b.php'); 此页面中不能使用 header location 跳转,否则无法达到变量共享的作用
var_dump($a);
<?php

ob_start();
include 'a.php';
ob_clean();
echo $a[1]; //a.php中的var_dump/echo类输出不会显示