MYSQL高级特性 — 事务处理

下面以两个银行账户之间的转账为例子进行演示。

要使用MySQL中的事务处理,首先需要创建使用事务表类型(如BDB = Berkeley DB或InnoDB)的表。

CREATE TABLE account ( account_id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, balance DOUBLE ) TYPE = InnoDB;

要在事务表上使用事务处理,必须要首先关闭自动提交:

SET AUTOCOMMIT = 0;

事务处理以BEGIN命令开始:

BEGIN;

现在mysql客户处在于服务器相关的事物上下文中。任何对事务表所做的改变在提交之前不会成为永久性的改变。

UPDATE ACCOUNT SET balance = 50.25 WHERE account_id = 1;

UPDATE ACCOUNT SET balance = 100.25 WHERE account_id = 2;

在做出所有的改变之后,使用COMMIT命令完成事务处理:

COMMIT;

当然,事务处理的真正优点是在执行第二条语句发生错误时体现出来的,若在提交前终止整个事务,可以进行回滚操作:

ROLLBACK;

下面是另一个例子,通过MYSQL直接进行数学运算:

SELECT @first := balance FROM account WHERE account_id = 1;

SELECT @second := balance FROM account WHERE account_id = 2;

UPDATE account SET balance = @first – 25.00 WHERE account_id = 1;

UPDATE account SET balance = @second + 25.00 WHERE account_id = 2;

除了COMMIT命令外,下列命令也会自动结束当前事务:

ALTER TABLE

BEGIN

CREATE INDEX

DROP DATABASE

DROP TABLE

LOCK TABLES

RENAME TABLE

TRUNCATE

UNLOCK TABLES

完善了picviewer 升级到1.1

  1. 图片的显示改用了双层block嵌套,修正了以前只能用tr标签换行的bug
  2. 全部图片专辑只用根目录下的index.php就可以完成显示,以往只能一个目录放一个index.php
  3. 界面作了少许修改,不过效果不佳
  4. 版本号改为1.1

此程序为练习PHPLIB之template之习作,到此已经比较完善,template也告一段落

在MySQL数据库中存储图片

汗,以前一直误以为MySQL不能存储图片

在mysql中建立一个新的数据库

一个怎样储存文件的例子程序

一个怎样访问文件的例子程序

在mysql中建立一个表

CREATE TABLE binary_data ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,description CHAR(50), bin_data LONGBLOB, filename CHAR(50), filesize CHAR(50), filetype CHAR(50));

< ?php

// getdata.php3 – by Florian Dittmer <[email protected]> // 调用方法: getdata.php3?id=<id>

if($id) {

    // 你可能需要调整主机名,用户名和密码:    @MYSQL_CONNECT( "localhost", "root", "password");
   @mysql_select_db( "binary_data");
   $query =  "select bin_data,filetype from binary_data where id=$id";    $result = @MYSQL_QUERY($query);
   $data = @MYSQL_RESULT($result,0, "bin_data");    $type = @MYSQL_RESULT($result,0, "filetype");
   Header(  "Content-type: $type");    echo $data;

}; ?>

怎样储存大于1MB的文件:

如果你想储存大于2MB的文件,你必须对你的程序、PHP设置、SQL设置进行许多修改。

下面几条也许可以帮助你储存小于24MB的文件:

修改你的PHP设置,在一般情况下,PHP只允许小于2MB的文件,你必须将max_filesize(在php.ini中)的值改成24000000

去掉MYSQL的数据包大小限制,在一般情况下 MYSQL 小于1 MB的数据包.

你必须用以下参数重启你的MYSQL

/usr/local/bin/safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=24M

如果仍然出错:

可能是超时错误,如果你通过一个很慢的连接来储存一个很大的文件,PHP缺省的时间限制为30秒。

你可以将max_execution_time(在php.ini中)的值改为-1

如何使用PHP中的字符串函数

不知为什么,一直都搞不好这字符串,无论PHP还是其它,汗!!

转自http://www.phpe.net

PHP中的字符串操作功能是比较多的,重要的有以下这些:

(1)echo,print,printf,sprintf

前两个函数是输出字符串.字符串中如果有变量名则被替换成其值. 后两个函数类似于C的同名函数.

(2)strchr,strlen,strtok,strrchr,strrev,strstr,strtolower, strtoupper,substr,ucfirst

这些是常用的字符串操作函数,有些和C中的同名函数意义完全一致.

strrev是把一个字符串翻转.

strtolower和strtoupper的意思应该不用解释了.

ucfirst是把字符串的第一个字符变成大写.

substr是返回字符串的一个子串,用法是:substr(字符串,头,长度).

头位置是 从0算起的.如果是负数,则是从尾部向前数的意思.

(3)Chr,Ord

类似于C的同名函数.

(4)explode,implode,join

这些是和数组有关的函数.

explode(字符串,分割符)返回一个将字符串在分割符处分开所产生的数组.

implode(数组,分割符)返回一个将数组各元素之间插上分割符而成的字符串.


join与implode意义相同.

(5)Chop

去掉字符串尾部的空白.

(6)htmlspecialchars

将字符串中的HTML特殊字符换成它们的名字,例如”< “变成”<“.

(7)nl2br

在字符串中的每一个回车前面加上”<BR>”.

(8)AddSlashes,StripSlashes

分别给字符串中需要加上””才能用于数据库查询的字符加上和去掉””.

(9)parse_str

将”name1=value1&name2=value2&…”类型的字符串分析成一些变量.


例如:

  parse_str("a=1&b=2");

生成$a与$b两个变量,值分别为1,2. 如果有两对名字/值的名字部分相同,则后一个的值覆盖前一个的. 如果这两对的名字尾部都有”“,例如”a=1&a=2″,则生成数组$a,两个元素分别为1,2

动态改变脚本的执行时间,解决执行超时问题

在 php 的配置/信息里面有一个设置脚本执行时间的函数,具体情况如下: set_time_limit 配置该页最久执行时间。 语法: void set_time_limit(int seconds); 返回值: 无 函数种类: PHP 系统功能 内容说明 本函数用来配置该页最久执行时间。默认值是 30 秒,在 php.ini 中的 max_execution_time 变量配置,若配置为 0 则不限定最久时间。当执行到该函数时,才开始计算。例如,若默认是 30 秒,而在执行到该函数前已执行了 25 秒,而用本函数改为 20 秒,则该页面最长执行时间为 45 秒。 使用实例:

  1. <?php
  2. set_time_limit(200);
  3. ?>