重新封装了一个mysqli的操作类,只是为了希望从 php_mysql 到 php_mysqli 切换的时候,能够不影响前端代码的使用。
结果改来改去最终还是决定将两组类分开写,毕竟 mysqli 的很多方法没法在 php_mysql 上找到,不愿意为旧的应用放弃新的特性,例如直接可用的 autocommit/commit/rollback 等。
但是作为直接调用 sinamysql.class.php 或 sinamysql.multiservices.class.php 的代码,不会受到影响,毕竟这一层代码只是适应底层的改动稍作了修正,没有太多其他的东西。
不过,其实是不是可以考虑上边放一个专门的文件,给外部代码调用,这样就不用改include/require了
http://code.google.com/p/sinamysqlclass/source/checkout
代码依旧很乱
目的只是为了支持多组主从服务器对,不希望看到某代码几乎每执行一次查询就重建一个连接的2行为。
Tuesday, August 25, 2009
Saturday, August 22, 2009
定购了 The Lost Symbol
先去amazon.com看的,然后顺道瞅了眼amazon.cn,居然有,虽然说有货时间在9.20,比正式发布时间晚了5天,但是从amazon.com ship过来估计也不止那些天。。。
¥148.00
等吧。。。
¥148.00
等吧。。。
Friday, August 21, 2009
不玩 t了,祝 Sina 微博好运
最后一篇发完了,留下个web版的数字截图
By sskaje at 2009-08-21
就这样吧
曾在这里留下过足迹
足够了
Good luck to you all!
PS: 我应该还保留着找到XSS最多的记录吧。。。
By sskaje at 2009-08-21
就这样吧
曾在这里留下过足迹
足够了
Good luck to you all!
PS: 我应该还保留着找到XSS最多的记录吧。。。
Tuesday, August 18, 2009
【对比上篇】MySQLi 对于相同用户名密码连接不同库的结果
两个版本的代码,一个po,一个oo
都是连到同一个服务器,相同的用户密码,只是不同的库
代码1
第二段代码
两个输出
两次sleep的时候,netstat的结果
还有谁想说mysql_select_db 那个是个feature么 :x
都是连到同一个服务器,相同的用户密码,只是不同的库
代码1
<?php
$db_1 = mysqli_connect('localhost', 'root', '31343540');
mysqli_select_db($db_1, 'ftpunion');
$db_2 = mysqli_connect('localhost', 'root', '31343540');
mysqli_select_db($db_2, 'ftpunion_new');
var_dump(mysqli_fetch_assoc(mysqli_query($db_1, 'select database();')));
var_dump(mysqli_fetch_assoc(mysqli_query($db_2, 'select database();')));
#mysqli_select_db('ftpunion', $db_1);
var_dump(mysqli_fetch_assoc(mysqli_query($db_1, 'select database();')));
第二段代码
<?php
$db_1 = new mysqli('localhost', 'root', '31343540');
$db_1->select_db('ftpunion');
var_dump($db_1->query('select database();')->fetch_assoc());
$db_2 = new mysqli('localhost', 'root', '31343540');
$db_2->select_db('ftpunion_new');
var_dump($db_2->query('select database();')->fetch_assoc());
#$db_1->select_db('ftpunion');
var_dump($db_1->query('select database();')->fetch_assoc());
两个输出
G:\wwwroot\Test\mysql>php mysqli_select_db.php
array(1) {
["database()"]=>
string(8) "ftpunion"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}
array(1) {
["database()"]=>
string(8) "ftpunion"
}
G:\wwwroot\Test\mysql>php mysqli_select_db_oo.php
array(1) {
["database()"]=>
string(8) "ftpunion"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}
array(1) {
["database()"]=>
string(8) "ftpunion"
}
两次sleep的时候,netstat的结果
G:\Projects\sina\Slot>netstat -ano |find "368"
TCP 127.0.0.1:2538 127.0.0.1:3306 ESTABLISHED 3688
TCP 127.0.0.1:2539 127.0.0.1:3306 ESTABLISHED 3688
G:\Projects\sina\Slot>netstat -ano |find "283"
TCP 127.0.0.1:2618 127.0.0.1:3306 ESTABLISHED 2836
TCP 127.0.0.1:2619 127.0.0.1:3306 ESTABLISHED 2836
还有谁想说mysql_select_db 那个是个feature么 :x
php_mysql my_select_db 多库交叉使用的bug
<?php
$db_1 = mysql_connect('localhost', 'root', 'root');
mysql_select_db('ftpunion', $db_1);
var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_1)));
$db_2 = mysql_connect('localhost', 'root', 'root');
mysql_select_db('ftpunion_new', $db_2);
var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_2)));
#mysql_select_db('ftpunion', $db_1);
var_dump(mysql_fetch_assoc(mysql_query('select database();', $db_1)));
结果是。。。
array(1) {
["database()"]=>
string(8) "ftpunion"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}
array(1) {
["database()"]=>
string(12) "ftpunion_new"
}
一个页面使用 相同的用户名和密码 连接使用 相同服务器 不同的库 的时候,只能是在切换库查询的时候,先得对对应的mysql 连接资源进行一次 mysql_select_db 操作,然后再执行查询
要不然你只能得到一个 错误的库.正确的表 不存在 的提示。。。因为貌似这个过程 php_mysql 实际只创建了一个连接,查询的库以最近一次的mysql_select_db的操作为准。。。。
sleep了20秒,看看netstat出来的链接数。。。。只有这一个
G:\Projects\sina\Slot>netstat -ano | find "4320"
TCP 127.0.0.1:1244 127.0.0.1:3306 ESTABLISHED 4320
其实这算是一个无奈的选择,
去给php 报bugs去。。。只是不知道这算不算bug
或者说。。。。It's not a bug, it's a feature, not sure if it's expected or not.
昨晚这个折腾了好久
好不容易写的类,不可能有逻辑问题,结果发现是这个2问题。。。
Sunday, August 16, 2009
Saturday, August 15, 2009
各种XSS。。。
测试t,结果从最早的版本页面的两个xss,到新的版本的一堆,web+wap,一片一片的。
不过每个xss点的长度都不算太长,虽然也不短。
想起以前的某次,两三年以前了吧,fk要去xss中国站长,貌似是这个,留言板的用户名没过滤,但是长度貌似只有30多个字节不到。
排序跟t差不多,新发的在上边。
当时最开始试图从单条记录里XSS,但是太不靠谱了。
后来突发灵感,因为先发的在下边。那就把脚本逆序发出来。
先发一个闭合 script标签
然后再发js的最后一句,倒数第二句。。。。。。
最后发一个 script的标签。
不过,这个时候因为中间有html,所以js会出错
于是 每次的输入就用 /* */ 把中间的内容干掉了
例如
不过最后貌似fk的账号被封了 ... :x
不过每个xss点的长度都不算太长,虽然也不短。
想起以前的某次,两三年以前了吧,fk要去xss中国站长,貌似是这个,留言板的用户名没过滤,但是长度貌似只有30多个字节不到。
排序跟t差不多,新发的在上边。
当时最开始试图从单条记录里XSS,但是太不靠谱了。
后来突发灵感,因为先发的在下边。那就把脚本逆序发出来。
先发一个闭合 script标签
然后再发js的最后一句,倒数第二句。。。。。。
最后发一个 script的标签。
不过,这个时候因为中间有html,所以js会出错
于是 每次的输入就用 /* */ 把中间的内容干掉了
例如
<script>/* */while(i)/*。。。 */alert(i++);/* */</script>
不过最后貌似fk的账号被封了 ... :x
Wednesday, August 5, 2009
Subscribe to:
Posts (Atom)