mysql_query 不支持多个查询,解决方法是使用 innodb 和事务
此数据库类/函数接受一个包含查询的二维数组,它将自动检查数据库中每行的受影响行数。如果其中一行是 0,它将回滚并返回 false,否则它将提交并返回 true。对该函数的调用非常简单,易于阅读等。
----------
类 MySQLDB
{
private $connection; // MySQL 数据库连接
/* 类构造函数 */
function MySQLDB(){
/* 建立数据库连接 */
$this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS) or die(mysql_error());
mysql_select_db(DB_NAME, $this->connection) or die(mysql_error());
}
/* 事务函数 */
function begin(){
$null = mysql_query("START TRANSACTION", $this->connection);
return mysql_query("BEGIN", $this->connection);
}
function commit(){
return mysql_query("COMMIT", $this->connection);
}
function rollback(){
return mysql_query("ROLLBACK", $this->connection);
}
function transaction($q_array){
$retval = 1;
$this->begin();
foreach($q_array as $qa){
$result = mysql_query($qa['query'], $this->connection);
if(mysql_affected_rows() == 0){ $retval = 0; }
}
if($retval == 0){
$this->rollback();
return false;
}else{
$this->commit();
return true;
}
}
};
/* 创建数据库连接对象 */
$database = new MySQLDB;
// 然后,从任何其他地方,只需将事务查询放在一个或多个数组中,如下所示
function function(){
global $database;
$q = array (
array("query" => "UPDATE table WHERE something = 'something'"),
array("query" => "UPDATE table WHERE something_else = 'something_else'"),
array("query" => "DELETE FROM table WHERE something_else2 = 'something_else2'"),
);
$database->transaction($q);
}