mirrored from http://git.drupal.org/project/drupal.git
/
database.mysql.inc
135 lines (111 loc) · 2.84 KB
/
database.mysql.inc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
// $Id$
function db_connect($url) {
$url = parse_url($url);
// Allow for non-standard MySQL port.
if (isset($url["port"])) {
$url["host"] = $url["host"] . ":" . $url["port"];
}
mysql_pconnect($url["host"], $url["user"], $url["pass"]) or die(mysql_error());
mysql_select_db(substr($url["path"], 1)) or die("unable to select database");
// NOTE: we are using a persistent connection!
}
function db_query($query) {
$args = func_get_args();
if (count($args) > 1) {
$args = array_map("check_query", $args);
$args[0] = $query;
return _db_query(call_user_func_array("sprintf", $args));
}
else {
return _db_query($query);
}
}
// debug version
function db_queryd($query) {
$args = func_get_args();
if (count($args) > 1) {
$args = array_map("check_query", $args);
$args[0] = $query;
return _db_query(call_user_func_array("sprintf", $args), 1);
}
else {
return _db_query($query, 1);
}
}
// private
function _db_query($query, $debug = 0) {
global $queries;
if (variable_get("dev_query", 0)) {
list($usec, $sec) = explode(" ", microtime());
$timer = (float)$usec + (float)$sec;
}
$result = mysql_query($query);
if (variable_get("dev_query", 0)) {
list($usec, $sec) = explode(" ", microtime());
$stop = (float)$usec + (float)$sec;
$diff = $stop - $timer;
$queries[] = array($query, $diff);
}
if ($debug) {
print "<p>query: $query<br />error:". mysql_error() ."</p>";
}
if (!mysql_errno()) {
return $result;
}
else {
trigger_error(mysql_error() ."\nquery: ". htmlspecialchars($query), E_USER_ERROR);
}
}
function db_fetch_object($result) {
if ($result) {
return mysql_fetch_object($result);
}
}
function db_fetch_array($result) {
if ($result) {
return mysql_fetch_array($result, MYSQL_ASSOC);
}
}
function db_num_rows($result) {
if ($result) {
return mysql_num_rows($result);
}
}
function db_result($result, $row = 0) {
if ($result && mysql_num_rows($result) > $row) {
return mysql_result($result, $row);
}
}
function db_error() {
return mysql_errno();
}
function db_next_id($name) {
/*
** Note that REPLACE query below correctly creates a new sequence
** when needed
*/
db_query("LOCK TABLES sequences WRITE");
$id = db_result(db_query("SELECT id FROM sequences WHERE name = '%s'", $name)) + 1;
db_query("REPLACE INTO sequences VALUES ('%s', '%d')", $name, $id);
db_query("UNLOCK TABLES");
return $id;
}
function db_affected_rows() {
return mysql_affected_rows();
}
/**
* Generates a limited query
*
* @param string $query query
* @param integer $from the row to start to fetching
* @param integer $count the numbers of rows to fetch
*
* @access public
*/
function db_query_range($query, $from, $count) {
$query .= " LIMIT $from, $count";
// TODO: debug version
return db_query($query);
}
?>