$ /usr/bin/sudo /usr/bin/rcsdiff /etc/config-archive/etc/mysql/mysql-proxy.cnf,v /etc/mysql/mysql-proxy.cnf =================================================================== RCS file: /etc/config-archive/etc/mysql/mysql-proxy.cnf,v retrieving revision 1.1 diff -r1.1 /etc/mysql/mysql-proxy.cnf 8c8 < #event-threads = ... --- > event-threads = 3 16c16 < #max-open-files = ... --- > max-open-files = 8192 33c33 < proxy-backend-addresses = 127.0.0.1:3306 --- > proxy-backend-addresses = 192.168.0.110:3306 35c35 < #proxy-lua-script = ... --- > proxy-lua-script = /tmp/tutorial-keepalive.lua
lua-scriptファイル修正。
$ qlist mysql-proxy|grep -i tutorial-keepalive /usr/share/doc/mysql-proxy-0.8.2/examples/tutorial-keepalive.lua.bz2 $ diff tutorial-keepalive.lua.orig tutorial-keepalive.lua 37,38c37,38 < local min_idle_connections = 4 < local max_idle_connections = 8 --- > local min_idle_connections = 40 > local max_idle_connections = 80
mysql, apache再起動。
sudo /etc/init.d/mysql-proxy stop && sudo /etc/init.d/mysql restart && sudo /etc/init.d/apache2 restart
手動で起動。ログを見る場合。
$ sudo /usr/bin/mysql-proxy --defaults-file=/etc/mysql/mysql-proxy.cnf
abコマンド。
(for CNT in $(seq 1 3); do for PERSISTENT in 0 1; do for DSN in 1 2; do for C in 5000; do \
N=`expr ${C} \* 5` && DATE=`php -r 'print preg_replace("/^0\.(.*?)0* (.*)$/e","date(\"Y-m-d-H-i-s-\",$2).\"$1\"",microtime());'` && \
echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
ab -n ${N} -c ${C} "http://192.168.0.110/test/ab.php?dsn=${DSN}&xxx=${DATE}&persistent=${PERSISTENT}" 2>&1 | grep -iP "^((Complete requests)|(Requests per second)):" && \
echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
grep xxx=${DATE} /var/log/apache2/access_log | awk '{print $9}' | sort | uniq -c && \
echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
mysqladmin status && \
echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
ps aux|grep -iP "^apache\s" | wc -l && \
echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
mysql -utest -ptest -h192.168.0.110 -P 3306 --protocol=TCP -e "SELECT COUNT(*) FROM information_schema.PROCESSLIST WHERE Command='Sleep';" && \
sleep 60 && echo "### END"; \
done; done; done; done;)
4パターン。pconnect有り無し×(mysqlTCP接続 or mysql-proxy経由)×3回。
同時接続数が多すぎて mysqlTCP接続+pconnect < mysqlTCP接続+connect になった。
pconnect無し+mysql-proxy経由が目的で80の持続的接続になった。
$ (for CNT in $(seq 1 3); do for PERSISTENT in 0 1; do for DSN in 1 2; do for C in 5000; do \
> N=`expr ${C} \* 5` && DATE=`php -r 'print preg_replace("/^0\.(.*?)0* (.*)$/e","date(\"Y-m-d-H-i-s-\",$2).\"$1\"",microtime());'` && \
> echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
> ab -n ${N} -c ${C} "http://192.168.0.110/test/ab.php?dsn=${DSN}&xxx=${DATE}&persistent=${PERSISTENT}" 2>&1 | grep -iP "^((Complete requests)|(Requests per second)):" && \
sleep 60 && echo "### END"; \
> echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
> grep xxx=${DATE} /var/log/apache2/access_log | awk '{print $9}' | sort | uniq -c && \
> echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
> mysqladmin status && \
> echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
> ps aux|grep -iP "^apache\s" | wc -l && \
> echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && \
> mysql -utest -ptest -h192.168.0.110 -P 3306 --protocol=TCP -e "SELECT COUNT(*) FROM information_schema.PROCESSLIST WHERE Command='Sleep';" && \
> sleep 60 && echo "### END"; \
> done; done; done; done;)
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-45-51-064473; PERSISTENT=0
Complete requests: 25000
Requests per second: 2660.93 [#/sec] (mean)
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-45-51-064473; PERSISTENT=0
25071 200
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-45-51-064473; PERSISTENT=0
Uptime: 32 Threads: 2 Questions: 100286 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 3133.937
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-45-51-064473; PERSISTENT=0
153
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-45-51-064473; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
### END
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-47-00-895929; PERSISTENT=0
Complete requests: 25000
Requests per second: 683.66 [#/sec] (mean)
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-47-00-895929; PERSISTENT=0
25000 200
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-47-00-895929; PERSISTENT=0
Uptime: 129 Threads: 79 Questions: 275213 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 2133.434
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-47-00-895929; PERSISTENT=0
251
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-47-00-895929; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 77 |
+----------+
### END
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-48-37-890069; PERSISTENT=1
Complete requests: 25000
Requests per second: 1055.95 [#/sec] (mean)
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-48-37-890069; PERSISTENT=1
25029 200
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-48-37-890069; PERSISTENT=1
Uptime: 213 Threads: 252 Questions: 325275 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1527.112
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-48-37-890069; PERSISTENT=1
251
===== CNT=1; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-48-37-890069; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 250 |
+----------+
### END
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-50-01-989929; PERSISTENT=1
Complete requests: 25000
Requests per second: 808.57 [#/sec] (mean)
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-50-01-989929; PERSISTENT=1
24934 200
66 505
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-50-01-989929; PERSISTENT=1
Uptime: 305 Threads: 206 Questions: 449742 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1474.563
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-50-01-989929; PERSISTENT=1
251
===== CNT=1; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-50-01-989929; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 204 |
+----------+
### END
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-51-33-325356; PERSISTENT=0
Complete requests: 25000
Requests per second: 2500.22 [#/sec] (mean)
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-51-33-325356; PERSISTENT=0
25122 200
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-51-33-325356; PERSISTENT=0
Uptime: 375 Threads: 2 Questions: 550234 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1467.290
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-51-33-325356; PERSISTENT=0
251
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-51-33-325356; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
### END
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-52-43-728182; PERSISTENT=0
Complete requests: 25000
Requests per second: 542.38 [#/sec] (mean)
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-52-43-728182; PERSISTENT=0
25000 200
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-52-43-728182; PERSISTENT=0
Uptime: 482 Threads: 82 Questions: 725122 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1504.402
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-52-43-728182; PERSISTENT=0
251
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-52-43-728182; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 80 |
+----------+
### END
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-54-30-261878; PERSISTENT=1
Complete requests: 25000
Requests per second: 1048.18 [#/sec] (mean)
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-54-30-261878; PERSISTENT=1
25113 200
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-54-30-261878; PERSISTENT=1
Uptime: 566 Threads: 252 Questions: 775360 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1369.893
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-54-30-261878; PERSISTENT=1
251
===== CNT=2; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-54-30-261878; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 250 |
+----------+
### END
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-55-54-557779; PERSISTENT=1
Complete requests: 25000
Requests per second: 806.09 [#/sec] (mean)
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-55-54-557779; PERSISTENT=1
24760 200
241 505
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-55-54-557779; PERSISTENT=1
Uptime: 657 Threads: 207 Questions: 898991 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1368.327
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-55-54-557779; PERSISTENT=1
251
===== CNT=2; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-55-54-557779; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 205 |
+----------+
### END
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-57-25-978648; PERSISTENT=0
Complete requests: 25000
Requests per second: 2492.24 [#/sec] (mean)
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-57-25-978648; PERSISTENT=0
25009 200
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-57-25-978648; PERSISTENT=0
Uptime: 728 Threads: 2 Questions: 999031 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1372.295
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-57-25-978648; PERSISTENT=0
250
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-20-57-25-978648; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
### END
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-58-36-410075; PERSISTENT=0
Complete requests: 25000
Requests per second: 573.13 [#/sec] (mean)
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-58-36-410075; PERSISTENT=0
25000 200
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-58-36-410075; PERSISTENT=0
Uptime: 832 Threads: 74 Questions: 1174607 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1411.787
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-58-36-410075; PERSISTENT=0
248
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-20-58-36-410075; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 72 |
+----------+
### END
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-21-00-20-465833; PERSISTENT=1
Complete requests: 25000
Requests per second: 1049.59 [#/sec] (mean)
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-21-00-20-465833; PERSISTENT=1
25075 200
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-21-00-20-465833; PERSISTENT=1
Uptime: 916 Threads: 236 Questions: 1224876 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1337.200
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-21-00-20-465833; PERSISTENT=1
241
===== CNT=3; DSN=1; C=5000; N=25000; DATE=2013-07-27-21-00-20-465833; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 234 |
+----------+
### END
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-21-01-44-72261; PERSISTENT=1
Complete requests: 25000
Requests per second: 792.33 [#/sec] (mean)
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-21-01-44-72261; PERSISTENT=1
24860 200
140 505
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-21-01-44-72261; PERSISTENT=1
Uptime: 1008 Threads: 215 Questions: 1349025 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 1338.318
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-21-01-44-72261; PERSISTENT=1
249
===== CNT=3; DSN=2; C=5000; N=25000; DATE=2013-07-27-21-01-44-72261; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 213 |
+----------+
### END
pconnectは同時接続数の見積もりがうまくいくと性能を発揮する。
$ (for CNT in $(seq 1 2); do for PERSISTENT in 0 1; do for DSN in 1; do for C in 250; do N=`expr ${C} \* 20` && DATE=`php -r 'print preg_replace("/^0\.(.*?)0* (.*)$/e","date(\"Y-m-d-H-i-s-\",$2).\"$1\"",microtime());'` && echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && ab -n ${N} -c ${C} "http://192.168.0.110/test/ab.php?dsn=${DSN}&xxx=${DATE}&persistent=${PERSISTENT}" 2>&1 | grep -iP "^((Complete requests)|(Requests per second)):" && echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && grep xxx=${DATE} /var/log/apache2/access_log | awk '{print $9}' | sort | uniq -c && echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && mysqladmin status && echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && ps aux|grep -iP "^apache\s" | wc -l && echo && echo "===== CNT=${CNT}; DSN=${DSN}; C=${C}; N=${N}; DATE=${DATE}; PERSISTENT=${PERSISTENT}" && mysql -utest -ptest -h192.168.0.110 -P 3306 --protocol=TCP -e "SELECT COUNT(*) FROM information_schema.PROCESSLIST WHERE Command='Sleep';" && sleep 0 && echo "### END"; done; done; done; done;)
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-32-828484; PERSISTENT=0
Complete requests: 5000
Requests per second: 3311.34 [#/sec] (mean)
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-32-828484; PERSISTENT=0
5000 200
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-32-828484; PERSISTENT=0
Uptime: 8 Threads: 1 Questions: 20001 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 2500.125
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-32-828484; PERSISTENT=0
9
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-32-828484; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
### END
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-34-664255; PERSISTENT=1
Complete requests: 5000
Requests per second: 4135.26 [#/sec] (mean)
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-34-664255; PERSISTENT=1
5000 200
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-34-664255; PERSISTENT=1
Uptime: 10 Threads: 7 Questions: 30011 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 3001.100
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-34-664255; PERSISTENT=1
7
===== CNT=1; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-34-664255; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 6 |
+----------+
### END
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-36-192441; PERSISTENT=0
Complete requests: 5000
Requests per second: 1737.66 [#/sec] (mean)
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-36-192441; PERSISTENT=0
5000 200
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-36-192441; PERSISTENT=0
Uptime: 13 Threads: 1 Questions: 50021 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 3847.769
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-36-192441; PERSISTENT=0
7
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-36-192441; PERSISTENT=0
+----------+
| COUNT(*) |
+----------+
| 0 |
+----------+
### END
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-39-404455; PERSISTENT=1
Complete requests: 5000
Requests per second: 3733.68 [#/sec] (mean)
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-39-404455; PERSISTENT=1
5001 200
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-39-404455; PERSISTENT=1
Uptime: 15 Threads: 13 Questions: 60029 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 4001.933
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-39-404455; PERSISTENT=1
13
===== CNT=2; DSN=1; C=250; N=5000; DATE=2013-07-27-21-22-39-404455; PERSISTENT=1
+----------+
| COUNT(*) |
+----------+
| 12 |
+----------+
### END
abコマンドに設定したスクリプト。
$ cat ab.php | perl -pe 's/([<>&])/{"<","<",">",">","&","&"}->{$1}/ge'
<?php
error_reporting(E_ALL|E_STRICT);
set_time_limit(0);
MAIN();
exit;
function MAIN()
{
$dsn = isset($_GET["dsn"]) ? (int)$_GET["dsn"] : 1;
$persistent = isset($_GET["persistent"]) ? (bool)$_GET["persistent"] : false;
$server = "";
$username = "";
$password = "";
switch ($dsn)
{
case 2:
$server = "127.0.0.1:4040";
$username = "test";
$password = "test";
break;
case 1:
default:
$server = "192.168.0.110:3306";
$username = "test";
$password = "test";
break;
}
$mysqlConnectFunc = $persistent ? "mysql_pconnect" : "mysql_connect";
$link = $mysqlConnectFunc($server, $username, $password);
if (!is_resource($link))
{
header('HTTP', true, 504);
trigger_error(sprintf("mysql_pconnect error. [%s] %s", mysql_errno(), mysql_error()), E_USER_ERROR);
}
$result = mysql_query("SHOW FULL PROCESSLIST;", $link);
if (!is_resource($result))
{
header('HTTP', true, 505);
var_dump($result);
trigger_error(sprintf("mysql_query error. [%s] %s", mysql_errno(), mysql_error()), E_USER_ERROR);
}
$num = mysql_num_rows($result);
print "\$server: " . htmlspecialchars($server) . "<br />\n";
print "\$username: " . htmlspecialchars($username) . "<br />\n";
print "\$password: " . htmlspecialchars($password) . "<br />\n";
print "number of lines: " . htmlspecialchars($num) . "<br />\n";
print "<table border=1 style=\"empty-cells: show;\">\n";
$cnt = 0;
while ($row = mysql_fetch_assoc($result))
{
$cnt++;
if ($cnt == 1)
{
print "<tr>\n";
foreach ($row as $key => $val)
{
print "<th>" . htmlspecialchars($key) . "</th>\n";
}
print "</tr>\n";
}
print "<tr>\n";
foreach ($row as $key => $val)
{
print "<td>" . htmlspecialchars($val) . "</td>\n";
}
print "</tr>\n";
}
print "</table>\n";
mysql_free_result($result);
$result = mysql_query("SET wait_timeout=30;");
if (!is_resource($result) && $result != true)
{
header('HTTP', true, 505);
var_dump($result);
trigger_error(sprintf("mysql_query error. [%s] %s", mysql_errno(), mysql_error()), E_USER_ERROR);
}
}
0 件のコメント:
コメントを投稿