@@ -27,24 +27,76 @@ function getNextShortURL($s) {
27
27
return implode ($ a );
28
28
}
29
29
30
- $ db = new mysqli (MYSQLI_HOST , MYSQLI_USER , MYSQLI_PASSWORD , MYSQLI_DATABASE );
31
- $ db ->query ('SET NAMES "utf8" ' );
30
+ switch (DB_FLAVOR ) {
31
+ case "mysql " :
32
+ $ dsn = DB_FLAVOR . ":dbname= " . DB_DATABASE . ";host= " . DB_HOST ;
33
+ break ;
34
+ case "sqlite " :
35
+ $ dsn = DB_FLAVOR . ": " . DB_DATABASE ;
36
+ break ;
37
+ default :
38
+ exit ("Unsupported database. " );
39
+ break ;
40
+ }
32
41
33
- $ url = $ db ->real_escape_string ($ url );
42
+ try {
43
+ $ db = new PDO ($ dsn , DB_USER , DB_PASSWORD );
44
+ } catch (PDOException $ e ) {
45
+ exit ("Database connection error: " . $ e ->getMessage (). "\n" );
46
+ }
34
47
35
- $ result = $ db ->query ('SELECT `slug` FROM `redirect` WHERE `url` = " ' . $ url . '" LIMIT 1 ' );
36
- if ($ result && $ result ->num_rows > 0 ) { // If there’s already a short URL for this URL
37
- die (SHORT_URL . $ result ->fetch_object ()->slug );
48
+ if (DB_FLAVOR == "sqlite " ) {
49
+ $ row = $ db ->query ("select name from sqlite_master where type = 'table' and name = 'something' " )->fetch ();
50
+
51
+ if ( ! $ row ) {
52
+ $ create_table = "CREATE TABLE 'redirect' ( "
53
+ . "'slug' varchar(14) NOT NULL, "
54
+ . "'url' varchar(620) NOT NULL, "
55
+ . "'date' datetime NOT NULL, "
56
+ . "'hits' bigint(20) NOT NULL default '0', "
57
+ . "PRIMARY KEY ('slug') "
58
+ . "); " ;
59
+ $ first_entry = "INSERT INTO 'redirect' VALUES ('a', 'http://www.example.com', datetime('now', '-1 minute'), 1); " ;
60
+ $ db ->query ($ create_table );
61
+ $ db ->query ($ first_entry );
62
+ }
63
+ }
64
+
65
+ if (DB_FLAVOR == "mysql " ) $ db ->query ('SET NAMES "utf8" ' );
66
+
67
+ $ lookup_stmt = $ db ->prepare ('SELECT `slug` FROM `redirect` WHERE `url` = :url LIMIT 1 ' );
68
+ $ lookup_stmt ->bindParam (':url ' , $ url );
69
+ $ lookup_stmt ->execute ();
70
+ $ result = $ lookup_stmt ->fetch ();
71
+
72
+ if ($ result ) { // If there’s already a short URL for this URL
73
+ exit (SHORT_URL . $ result ['slug ' ]);
38
74
} else {
39
- $ result = $ db ->query ('SELECT `slug`, `url` FROM `redirect` ORDER BY `date` DESC LIMIT 1 ' );
40
- if ($ result && $ result ->num_rows > 0 ) {
41
- $ slug = getNextShortURL ($ result ->fetch_object ()->slug );
42
- if ($ db ->query ('INSERT INTO `redirect` (`slug`, `url`, `date`, `hits`) VALUES (" ' . $ slug . '", " ' . $ url . '", NOW(), 0) ' )) {
75
+ $ result = $ db ->query ('SELECT `slug`, `url` FROM `redirect` ORDER BY `date` DESC LIMIT 1 ' )->fetch ();
76
+ if ($ result ) {
77
+ $ slug = getNextShortURL ($ result ['slug ' ]);
78
+
79
+ switch (DB_FLAVOR ) {
80
+ case "mysql " :
81
+ $ insert_stmt = $ db ->prepare ("INSERT INTO redirect(slug, url, date, hits) VALUES (:slug, :url, NOW(), 0) " );
82
+ break ;
83
+ case "sqlite " :
84
+ $ insert_stmt = $ db ->prepare ("INSERT INTO redirect(slug, url, date, hits) VALUES (:slug, :url, datetime('now', 'localtime'), 0) " );
85
+ break ;
86
+ default :
87
+ break ;
88
+ }
89
+ $ insert_stmt ->bindParam (':slug ' , $ slug );
90
+ $ insert_stmt ->bindParam (':url ' , $ url );
91
+ $ r = $ insert_stmt ->execute ();
92
+
93
+ if ($ r ) {
43
94
header ('HTTP/1.1 201 Created ' );
44
95
echo SHORT_URL . $ slug ;
45
- $ db ->query ('OPTIMIZE TABLE `redirect` ' );
96
+
97
+ if (DB_FLAVOR == "mysql " ) $ db ->query ('OPTIMIZE TABLE `redirect` ' );
46
98
}
47
99
}
48
100
}
49
101
50
- ?>
102
+ ?>
0 commit comments