喜悦国际村 » 喜悦原创 » [喜悦原创首发]php6展望 && PDO的使用

页: [1] 2 3
fcicqbbs2006-7-6 01:39 PM
[喜悦原创首发]php6展望 && PDO的使用

先展望php6(当然也可能是php5.2之类,暂未确定)

去掉的东西(感觉有必要提的)
2.1 register_globals
这个影响安全,又不好处理.
2.2 magic_quotes
这个本意很好,但反对的声音很多...
2.3 safe_mode
这个东西被E_CORE_ERROR代替了.
2.11 register_long_arrays, HTTP_*_VARS
这个东西影响速度

特别的
1. Unicode
这个东西好!不用再担心很多了.
3.1 XMLReader / XMLWriter in the distribution, on by default
以后处理rss之类的就更容易了
3.2 Move non-PDO DB extensions to PECL
下面特别讨论.
3.3 Move ereg to PECL
实际preg,ereg差不多.用两个等于浪费.

其余的参见([url]http://www.php.net/~derick/meeting-notes.html)[/url]

============================================
下面描述一下,在php6,没有mysql_*,我们怎么过.

首先要连接mysql数据库
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
//如果你想连mssql:
//mssql:host=localhost;dbname=testdb
//连pgsql:
//pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass
//连odbc(DSN)
//odbc:testdb
//连access:
//odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin
//还有oracle,sqlite,db2....

我要执行个查询
   foreach ($dbh->query('SELECT * from FOO') as $row) {
      print_r($row); //这个结果和mysql_fetch_array差不多。PDOStatement::setFetchMode 可以调整。
   }
//现在多简单

另外还可以:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
得到:
Fetch all of the remaining rows in the result set:
Array
(
    [0] => Array
        (
            [NAME] => pear
            [0] => pear
            [COLOUR] => green
            [1] => green
        )

    [1] => Array
        (
            [NAME] => watermelon
            [0] => watermelon
            [COLOUR] => pink
            [1] => pink
        )

)

偶还想删/更新条数据。
$count = $dbh->exec("DELETE FROM fruit WHERE colour = 'red'");
//$count就是删除的条数。相当于mysql_affected_rows
//也可用PDOStatement::rowCount

偶忘了偶用啥数据库了。。。。
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == 'mysql') {
  echo "Running on mysql; doing something mysql specific here\n";
}

偶插入数据的时候要用mysql_escape_string.现在?

print "Unquoted string: $string\n";
print "Quoted string: " . $conn->quote($string) . "\n";
得到:
Unquoted string: Nice
Quoted string: 'Nice'
//你看现在连引号都自动加了。。。。
//注意在不同的数据库中结果不同,比如有的' => '',有的' => \',\ => \\
//现在没顾虑了,全自动。

//最后偶要关闭它了
$conn = null; //fcicq和这个数据库连接要说再见了。。。。
//但是!你可以:
$dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2',
     array(PDO_ATTR_PERSISTENT => true)); //保持连接

很简单的不是?

附:特别简单的特殊调用方法:
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) { //你怕啥?自动quote!
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}

也可以:
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES['file']['type']);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);

这么好的功能,哪里可以找到?php5.1以上在扩展里,php5在pecl里,php4?你别想了,没有。
联系作者fcicq: fcicqbbs at gmail dot com.
如果有问题,或者错误,均可联系。呵呵。
版权声明:非代码部分(含部分注释)原创,所有代码的均摘自手册
最后一句:喜悦首发,严禁转帖

                        fcicq 2006.7.6 21:33

[[i] 本帖最后由 qh663 于 2006-7-6 10:08 PM 编辑 [/i]]

内存不足2006-7-6 02:20 PM
偶反对,mysql_*是偶的最爱,搞成类了就不好玩了.

内存不足2006-7-6 02:22 PM
$stmt = $dbh->prepare("SELECT * FROM REGISTRY where name = ?");
if ($stmt->execute(array($_GET['name']))) { //你怕啥?自动quote!
  while ($row = $stmt->fetch()) {
    print_r($row);
  }
}
这东西跟咱自己写的类有啥区别?

[[i] 本帖最后由 内存不足 于 2006-7-6 10:24 PM 编辑 [/i]]

qh6632006-7-6 02:23 PM
楼主让大家都了解一点php6了,随手将楼主的 Smilies禁用了下(代码部分会出现 Smilies)。
不会取消mysql吧,虽然mysqli在php5中存在了,但并不是默认支持的。新的数据操作虽然简单,必竟熟悉了以前的,新的不容易记。呵呵..

内存不足2006-7-6 02:24 PM
不喜欢这种风格,太像ASP中的那个ADO什么的了.

唉,还是脱离不了微软,看来我还是去学C++Builder的好,那东西至少几年内微软还动不了它.

sq12282006-7-7 02:16 AM
我觉得PHP6挺好的,关于mysql_*,取消就取消,我本来就没有在用,现在就不用在用体积肥大的adodb了,这不是更好!

fcicqbbs2006-7-7 03:08 AM
这个东西是这样的.mysql,mssql,odbc.....,这些函数移动到PECL中,自己编译.PDO变为内置

***其余的参见([url]http://www.php.net/~derick/meeting-notes.html)[/url]***

这个pdo能支持这么多种数据库而不需要特别的改动代码,不是挺好的?
虽然偶现在还是用mysql_*多些,但偶的代码很接近这种写法了.

反正php5.0都可以支持这些东西,那就可以开始用pdo了.

fcicqbbs2006-7-7 03:13 AM
回3楼:
这个问号和printf差不多.
里面execute(array($_GET['name'])),就把$_GET['name']转义后直接带给第1个问号.很智能...
另外可以
select from abc where abc=? and def=?
execute(array($_GET['abc'],$_POST['def']))
都是自动的.

starDust2006-7-7 03:32 AM
我用pear::DB_QueryTool

fcicqbbs2006-7-7 05:41 AM
到时pear的内部代码也要重写.哈哈.不过影响不到楼上了.

kernel2006-7-11 05:59 AM
sql 这么改会很影响他的推广速度

fcicqbbs2006-7-11 06:02 AM
可能会影响吧....

就象现在的php4/5一样,还是有许多人不换的.

Yangtze2006-7-20 05:10 PM
又在这里见楼主~

fcicqbbs2006-7-27 11:03 AM
楼上的是?

1153001112006-8-4 10:38 AM
忍不住了,顶!

chshyu2006-8-17 07:03 AM
和perl的风格差不多。

pangran2006-8-24 02:13 AM
php要在原来的风格上做任何有益的改动,我都欢迎,已经习惯php了

tianyaxiao2006-9-8 06:43 AM
2.2 magic_quotes
这个本意很好,但反对的声音很多...


if ($stmt->execute(array($_GET['name']))) { //你怕啥?自动quote!
---------------------------------
不是已经取消自动转义了吗??
楼主你怎么自相矛盾??

爱蓝2006-9-8 07:09 AM
我觉得mysql很好用啊,我还是初学者,对于那些,对象呀,类呀,一看到就怕

fcicq2006-9-8 09:24 AM
不是自相矛盾.
---
因为去掉了magic_quotes,
所以增加了这个功能,那个?指代的就是 $_get['name']


查看完整版本: [喜悦原创首发]php6展望 && PDO的使用


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.007116 second(s), 2 queries