Commit: 14f8c07aec4285ee376f5f88a64d3449e1e6b6ef
Author: Peter Kokot <[email protected]> Fri, 14 Dec 2018 15:22:18
+0100
Parents: 3a9021ab3a0ca634023a73f3c4220b67ba386be0
Branches: master
Link:
http://git.php.net/?p=web/bugs.git;a=commitdiff;h=14f8c07aec4285ee376f5f88a64d3449e1e6b6ef
Log:
Refactor PDO wrapper
Some considerations were raised on the mailing list that this PHP
application doesn't need a PDO wrapper at all.
Changes:
- ::fetchRow() method removed in favor of the vanilla PDOStatement::fetch()
- ::fetchAll() override removed in favor of the vanilla
PDOStatement::fetchAll()
- ::fetchCol() removed since it is not used and is only a wrapper for
the PDOStatement::fetchColumn()
- PDO fetch_style synced accross the app. When no fetch style is passed
the default PDO::FETCH_ASSOC is used as set when connecting to db.
- Remove Database::escape() method
The custom ::escape() method is a wrapper around PDO::quote() which
additionally trims leading and trailing quotes from the string. All
this should ideally be done via prepared statements only, except where
we can and need to use PDO::quote() this step can be done on the given
string or variable at hand directly.
- Remove escapeSQL() function
The escapeSQL function is a wrapper around the PDO::quote() and is
using $dbh from the global scope which is not testable nor good practice
further on. Removed and refactored into only PDO::quote() usages on
required places.
- Remove ::fetchOne() method
The fetchOne() method is a simple wrapper around the PDOStatement::fetch()
method with very minor tweaks so the usage can be simplified even more.
The PDOStatement::fetch(\PDO::FETCH_NUM)[0] will always return either a
result from the database column or when row is empty a null.
- Probably this should be refactored to the database tables respected
repositories further on.
- Remove PDO wrapper
The app's current goal is to lean on a vanilla PDO wrapper only.
Current set of features also don't require additional functionality
and extending PDO to a wrapper or create a database abstraction layer
yet.
Changed paths:
M include/functions.php
M include/prepend.php
M include/query.php
M scripts/cron/email-assigned
M scripts/cron/no-feedback
D src/Database/Database.php
M src/Database/Statement.php
M src/Repository/ObsoletePatchRepository.php
M src/Repository/PackageRepository.php
M src/Repository/PatchRepository.php
M src/Repository/PullRequestRepository.php
M src/Utils/GitHub.php
M src/Utils/PatchTracker.php
M www/admin/index.php
M www/api.php
M www/bug-pwd-finder.php
M www/index.php
M www/lstats.php
M www/report.php
M www/stats.php
M www/vote.php
diff --git a/include/functions.php b/include/functions.php
index a45cda0..6206db3 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -279,30 +279,6 @@ function spam_protect($txt, $format = 'html')
}
/**
- * Escape strings so they can be used as literals in queries
- *
- * @param string|array $in data to be sanitized. If it's an array,
each element is sanitized.
- *
- * @return string|array the sanitized data
- *
- * @see oneof(), field(), txfield()
- */
-function escapeSQL($in)
-{
- global $dbh;
-
- if (is_array($in)) {
- $out = [];
- foreach ($in as $key => $value) {
- $out[$key] = $dbh->escape($value);
- }
- return $out;
- } else {
- return $dbh->escape($in);
- }
-}
-
-/**
* Goes through each variable submitted and returns the value
* from the first variable which has a non-empty value
*
@@ -312,7 +288,7 @@ function escapeSQL($in)
*
* @return mixed the value, if any
*
- * @see escapeSQL(), field(), txfield()
+ * @see field(), txfield()
*/
function oneof()
{
@@ -334,7 +310,7 @@ function oneof()
*
* @return mixed the data requested
*
- * @see escapeSQL(), oneof(), txfield()
+ * @see oneof(), txfield()
*/
function field($n)
{
@@ -1075,13 +1051,13 @@ function get_old_comments($bug_id, $all = 0)
// skip the most recent unless the caller wanted all comments
if (!$all) {
- $row = $res->fetchRow(PDO::FETCH_NUM);
+ $row = $res->fetch(\PDO::FETCH_NUM);
if (!$row) {
return '';
}
}
- while (($row = $res->fetchRow(PDO::FETCH_NUM)) && strlen($output) <
$max_message_length && $count++ < $max_comments) {
+ while (($row = $res->fetch(\PDO::FETCH_NUM)) && strlen($output) <
$max_message_length && $count++ < $max_comments) {
$email = spam_protect($row[1], 'text');
$output .= "[{$row[0]}] {$email}\n\n{$row[2]}\n\n{$divider}\n";
}
@@ -1091,7 +1067,7 @@ function get_old_comments($bug_id, $all = 0)
if (!$res) {
return $output;
}
- $row = $res->fetchRow(PDO::FETCH_NUM);
+ $row = $res->fetch(\PDO::FETCH_NUM);
if (!$row) {
return $output;
}
@@ -1256,7 +1232,7 @@ function get_package_mail($package_name, $bug_id = false,
$bug_type = 'Bug')
WHERE name = ?
')->execute([$package_name]);
- list($list_email, $project) = $res->fetchRow();
+ list($list_email, $project) = $res->fetch(\PDO::FETCH_NUM);
if ($project == 'pecl') {
$mailfrom = '[email protected]';
@@ -1270,7 +1246,7 @@ function get_package_mail($package_name, $bug_id = false,
$bug_type = 'Bug')
} else {
// Get the maintainers handle
if ($project == 'pecl') {
- $handles = $dbh->prepare("SELECT
GROUP_CONCAT(handle) FROM bugdb_packages_maintainers WHERE package_name =
?")->execute([$package_name])->fetchOne();
+ $handles = $dbh->prepare("SELECT
GROUP_CONCAT(handle) FROM bugdb_packages_maintainers WHERE package_name =
?")->execute([$package_name])->fetch(\PDO::FETCH_NUM)[0];
if ($handles) {
foreach (explode(',', $handles) as
$handle) {
@@ -1290,7 +1266,7 @@ function get_package_mail($package_name, $bug_id = false,
$bug_type = 'Bug')
if ($bug_id) {
$bug_id = (int) $bug_id;
- $assigned = $dbh->prepare("SELECT assign FROM bugdb WHERE id= ?
")->execute([$bug_id])->fetchOne();
+ $assigned = $dbh->prepare("SELECT assign FROM bugdb WHERE id= ?
")->execute([$bug_id])->fetch(\PDO::FETCH_NUM)[0];
if ($assigned) {
$assigned .= '@php.net';
if ($assigned && !in_array($assigned, $to)) {
@@ -1315,6 +1291,8 @@ function get_package_mail($package_name, $bug_id = false,
$bug_type = 'Bug')
*/
function format_search_string($search, $boolean_search = false)
{
+ global $dbh;
+
// Function will be updated to make results more relevant.
// Quick hack for indicating ignored words.
$min_word_len=3;
@@ -1337,15 +1315,15 @@ function format_search_string($search, $boolean_search
= false)
foreach ($used as $word) {
$newsearch .= "+$word ";
}
- return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST
('" . escapeSQL($newsearch) . "' IN BOOLEAN MODE)", $ignored];
+ return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST
(" . $dbh->quote($newsearch) . " IN BOOLEAN MODE)", $ignored];
// allow custom boolean search (raw)
} elseif ($boolean_search === 2) {
- return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST
('" . escapeSQL($search) . "' IN BOOLEAN MODE)", $ignored];
+ return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST
(" . $dbh->quote($search) . " IN BOOLEAN MODE)", $ignored];
}
}
// require any of the words (any)
- return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST ('" .
escapeSQL($search) . "')", $ignored];
+ return [" AND MATCH (bugdb.email,sdesc,ldesc) AGAINST (" .
$dbh->quote($search) . ")", $ignored];
}
/**
@@ -1415,7 +1393,6 @@ function unsubscribe($bug_id, $hash)
{
global $dbh;
- $hash = escapeSQL($hash);
$bug_id = (int) $bug_id;
$query = "
@@ -1424,7 +1401,7 @@ function unsubscribe($bug_id, $hash)
WHERE bug_id = ? AND unsubscribe_hash = ? LIMIT 1
";
- $sub = $dbh->prepare($query)->execute([$bug_id,
$hash])->fetch(PDO::FETCH_ASSOC);
+ $sub = $dbh->prepare($query)->execute([$bug_id, $hash])->fetch();
if (!$sub) {
return false;
@@ -1458,8 +1435,8 @@ function get_resolve_reasons($project = false)
$where = '';
if ($project !== false) {
- $project = escapeSQL($project);
- $where.= "WHERE (project = '{$project}' OR project = '')";
+ $project = $dbh->quote($project);
+ $where.= "WHERE (project = {$project} OR project = '')";
}
$resolves = $variations = [];
@@ -1467,7 +1444,7 @@ function get_resolve_reasons($project = false)
if (!$res) {
throw new Exception("SQL Error in get_resolve_reasons");
}
- while ($row = $res->fetchRow(PDO::FETCH_ASSOC)) {
+ while ($row = $res->fetch()) {
if (!empty($row['package_name'])) {
$variations[$row['name']][$row['package_name']] =
$row['message'];
} else {
@@ -1502,7 +1479,7 @@ function bugs_get_bug($bug_id)
WHERE b.id = ?
GROUP BY bug';
- return
$dbh->prepare($query)->execute([$bug_id])->fetchRow(PDO::FETCH_ASSOC);
+ return $dbh->prepare($query)->execute([$bug_id])->fetch();
}
/**
@@ -1522,7 +1499,7 @@ function bugs_get_bug_comments($bug_id)
WHERE c.bug = ?
GROUP BY c.id ORDER BY c.ts
";
- return
$dbh->prepare($query)->execute([$bug_id])->fetchAll(PDO::FETCH_ASSOC);
+ return $dbh->prepare($query)->execute([$bug_id])->fetchAll();
}
/**
@@ -1562,7 +1539,7 @@ function verify_bug_passwd($bug_id, $passwd)
{
global $dbh;
- return (bool) $dbh->prepare('SELECT 1 FROM bugdb WHERE id = ? AND
passwd = ?')->execute([$bug_id, $passwd])->fetchOne();
+ return (bool) $dbh->prepare('SELECT 1 FROM bugdb WHERE id = ? AND
passwd = ?')->execute([$bug_id, $passwd])->fetch(\PDO::FETCH_NUM)[0];
}
/**
diff --git a/include/prepend.php b/include/prepend.php
index 9e03d69..388ebb1 100644
--- a/include/prepend.php
+++ b/include/prepend.php
@@ -1,7 +1,7 @@
<?php
use App\Autoloader;
-use App\Database\Database;
+use App\Database\Statement;
// Dual PSR-4 compatible class autoloader. When Composer is not available, an
// application specific replacement class is used. Once Composer can be added
@@ -61,19 +61,24 @@ $docBugEmail = $site_data['doc_email'];
$secBugEmail = $site_data['security_email'];
$basedir = $site_data['basedir'];
define('BUG_PATCHTRACKER_TMPDIR', $site_data['patch_tmp']);
-define('DATABASE_DSN',
"mysql:host={$site_data['db_host']};dbname={$site_data['db']};charset=utf8");
/**
* Obtain the functions and variables used throughout the bug system
*/
require_once "{$ROOT_DIR}/include/functions.php";
-// Database connection (required always?)
-$dbh = new Database(DATABASE_DSN, $site_data['db_user'],
$site_data['db_pass'], [
- \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
- \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
- \PDO::ATTR_EMULATE_PREPARES => false,
-]);
+// Database connection with vanilla PDO to understand app architecture in no
time
+$dbh = new \PDO(
+
'mysql:host='.$site_data['db_host'].';dbname='.$site_data['db'].';charset=utf8',
+ $site_data['db_user'],
+ $site_data['db_pass'],
+ [
+ \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
+ \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
+ \PDO::ATTR_EMULATE_PREPARES => false,
+ \PDO::ATTR_STATEMENT_CLASS => [Statement::class],
+ ]
+);
// Last Updated..
$tmp = filectime($_SERVER['SCRIPT_FILENAME']);
diff --git a/include/query.php b/include/query.php
index da996d8..51ed807 100644
--- a/include/query.php
+++ b/include/query.php
@@ -88,7 +88,8 @@ if (isset($_GET['cmd']) && $_GET['cmd'] == 'display')
if (!empty($package_name)) {
$where_clause .= ' AND bugdb.package_name';
if (count($package_name) > 1) {
- $where_clause .= " IN ('" . join("', '",
escapeSQL($package_name)) . "')";
+ $package_name = array_map([$dbh, 'quote'],
$package_name);
+ $where_clause .= " IN (" . join(", ", $package_name) .
")";
} else {
$where_clause .= ' = ' . $dbh->quote($package_name[0]);
}
@@ -97,7 +98,8 @@ if (isset($_GET['cmd']) && $_GET['cmd'] == 'display')
if (!empty($package_nname)) {
$where_clause .= ' AND bugdb.package_name';
if (count($package_nname) > 1) {
- $where_clause .= " NOT IN ('" . join("', '",
escapeSQL($package_nname)) . "')";
+ $package_nname = array_map([$dbh, 'quote'],
$package_nname);
+ $where_clause .= " NOT IN (" . join(", ",
$package_nname) . ")";
} else {
$where_clause .= ' <> ' .
$dbh->quote($package_nname[0]);
}
@@ -169,19 +171,19 @@ if (isset($_GET['cmd']) && $_GET['cmd'] == 'display')
}
if ($php_os != '') {
- $where_clause .= " AND bugdb.php_os {$php_os_not} LIKE '%" .
$dbh->escape($php_os) . "%'";
+ $where_clause .= " AND bugdb.php_os {$php_os_not} LIKE " .
$dbh->quote('%'.$php_os.'%');
}
if ($phpver != '') {
- $where_clause .= " AND bugdb.php_version LIKE '" .
$dbh->escape($phpver) . "%'";
+ $where_clause .= " AND bugdb.php_version LIKE " .
$dbh->quote($phpver.'%');
}
if ($project != '') {
- $where_clause .= " AND EXISTS (SELECT 1 FROM
bugdb_pseudo_packages b WHERE b.name = bugdb.package_name AND b.project = '".
$dbh->escape($project) ."' LIMIT 1)";
+ $where_clause .= " AND EXISTS (SELECT 1 FROM
bugdb_pseudo_packages b WHERE b.name = bugdb.package_name AND b.project = ".
$dbh->quote($project) ." LIMIT 1)";
}
if ($cve_id != '') {
- $where_clause .= " AND bugdb.cve_id {$cve_id_not} LIKE '" .
$dbh->escape($cve_id) . "%'";
+ $where_clause .= " AND bugdb.cve_id {$cve_id_not} LIKE " .
$dbh->quote($cve_id.'%');
}
/* A search for patch&pull should be (patch or pull) */
@@ -213,12 +215,14 @@ if (isset($_GET['cmd']) && $_GET['cmd'] == 'display')
if ($pseudo = array_intersect(array_keys($pseudo_pkgs), $package_name))
{
$where_clause .= " OR bugdb.package_name";
if (count($pseudo) > 1) {
- $where_clause .= " IN ('" . join("', '",
escapeSQL($pseudo)) . "')";
+ $pseudo = array_map([$dbh, 'quote'], $pseudo);
+ $where_clause .= " IN (" . join(", ", $pseudo) . ")";
} else {
- $where_clause .= " = '" . implode('',
escapeSQL($pseudo)) . "'";
+ $where_clause .= " = " . $dbh->quote(reset($pseudo));
}
} else {
- $where_clause .= " OR bugdb.package_name IN ('" . join("', '",
escapeSQL(array_keys($pseudo_pkgs))) . "')";
+ $items = array_map([$dbh, 'quote'], array_keys($pseudo_pkgs));
+ $where_clause .= " OR bugdb.package_name IN (" . join(", ",
$items) . ")";
}
$query .= "$where_clause )";
@@ -269,7 +273,7 @@ if (isset($_GET['cmd']) && $_GET['cmd'] == 'display')
try {
$result = $dbh->prepare($query)->execute()->fetchAll();
$rows = count($result);
- $total_rows = $dbh->prepare('SELECT
FOUND_ROWS()')->execute()->fetchOne();
+ $total_rows = $dbh->prepare('SELECT
FOUND_ROWS()')->execute()->fetch(\PDO::FETCH_NUM)[0];
} catch (Exception $e) {
$errors[] = 'Invalid query: ' . $e->getMessage();
}
diff --git a/scripts/cron/email-assigned b/scripts/cron/email-assigned
index 6257c52..c1977d4 100755
--- a/scripts/cron/email-assigned
+++ b/scripts/cron/email-assigned
@@ -17,7 +17,7 @@ $sql = "SELECT id, package_name, bug_type, sdesc, status,
assign, UNIX_TIMESTAMP
$res = $dbh->query($sql);
// Gather up the data
-while ($row = $res->fetchRow(PDO::FETCH_ASSOC)) {
+while ($row = $res->fetch()) {
$data[$row['assign']][] = $row;
}
diff --git a/scripts/cron/no-feedback b/scripts/cron/no-feedback
index a32b955..e3154f8 100755
--- a/scripts/cron/no-feedback
+++ b/scripts/cron/no-feedback
@@ -24,7 +24,7 @@ if ($dbh)
WHERE status = 'Feedback' AND ts2 < DATE_SUB(NOW(), INTERVAL
{$after})
")->execute([]);
- while ($bug = $res->fetchRow(PDO::FETCH_ASSOC))
+ while ($bug = $res->fetch())
{
list($mailto, $mailfrom, $bcc, $params) =
get_package_mail($bug['package_name'], false, $bug['bug_type']);
diff --git a/src/Database/Database.php b/src/Database/Database.php
deleted file mode 100644
index 467f189..0000000
--- a/src/Database/Database.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-namespace App\Database;
-
-use App\Database\Statement;
-
-/**
- * Thin PDO wrapper for bugs.php.net.
- *
- * @author Maciej Sobaczewski <[email protected]>
- */
-class Database extends \PDO
-{
- /**
- * When creating new PDO object, automagically switch PDOStatement with own
- * extended implementation.
- */
- public function __construct(string $dsn, string $username = '', string
$password = '', array $options = [])
- {
- parent::__construct($dsn, $username, $password, $options);
-
- $this->setAttribute(\PDO::ATTR_STATEMENT_CLASS, [Statement::class]);
- }
-
- /**
- * PDO puts apostrophes around the text so we need to strip the outermost
- * characters.
- */
- public function escape($text, $escape_wildcards = false)
- {
- return substr($this->quote($text), 1, -1);
- }
-}
diff --git a/src/Database/Statement.php b/src/Database/Statement.php
index 75b545b..f967ef9 100644
--- a/src/Database/Statement.php
+++ b/src/Database/Statement.php
@@ -13,34 +13,10 @@ class Statement extends \PDOStatement
* \PDOStatement::execute(), on the other hand, returns boolean. Change it
* to return $this and thus allow further method chaining.
*/
- public function execute($input_parameters = null)
+ public function execute($parameters = null): self
{
- parent::execute($input_parameters);
+ parent::execute($parameters);
return $this;
}
-
- public function fetchAll($fetchode = null, $rekey = false, $force_array =
false, $group = false)
- {
- return parent::fetchAll();
- }
-
- public function fetchCol($colnum)
- {
- return parent::fetchColumn($colnum);
- }
-
- public function fetchOne($colnum = 0, $rownum = null)
- {
- return $this->fetch(\PDO::FETCH_NUM)[0];
- }
-
- public function fetchRow($mode = null)
- {
- if (!$mode) {
- $mode = \PDO::FETCH_BOTH;
- }
-
- return $this->fetch($mode);
- }
}
diff --git a/src/Repository/ObsoletePatchRepository.php
b/src/Repository/ObsoletePatchRepository.php
index 2335ec9..2682cee 100644
--- a/src/Repository/ObsoletePatchRepository.php
+++ b/src/Repository/ObsoletePatchRepository.php
@@ -2,8 +2,6 @@
namespace App\Repository;
-use App\Database\Database;
-
/**
* Repository for retrieving data from the bugdb_obsoletes_patches database
table.
*/
@@ -11,14 +9,14 @@ class ObsoletePatchRepository
{
/**
* Database handler.
- * @var Database
+ * @var \PDO
*/
private $dbh;
/**
* Class constructor.
*/
- public function __construct(Database $dbh)
+ public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
}
diff --git a/src/Repository/PackageRepository.php
b/src/Repository/PackageRepository.php
index 178a485..96392c8 100644
--- a/src/Repository/PackageRepository.php
+++ b/src/Repository/PackageRepository.php
@@ -2,8 +2,6 @@
namespace App\Repository;
-use App\Database\Database;
-
/**
* Repository class for retrieving data from the bugdb_pseudo_packages database
* table.
@@ -12,7 +10,7 @@ class PackageRepository
{
/**
* Database handler.
- * @var Database
+ * @var \PDO
*/
private $dbh;
@@ -27,7 +25,7 @@ class PackageRepository
/**
* Class constructor.
*/
- public function __construct(Database $dbh)
+ public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
}
diff --git a/src/Repository/PatchRepository.php
b/src/Repository/PatchRepository.php
index a3a6d87..971c1ff 100644
--- a/src/Repository/PatchRepository.php
+++ b/src/Repository/PatchRepository.php
@@ -2,8 +2,6 @@
namespace App\Repository;
-use App\Database\Database;
-
/**
* Repository for retrieving data from the bugdb_patchtracker database table.
*/
@@ -11,7 +9,7 @@ class PatchRepository
{
/**
* Database handler.
- * @var Database
+ * @var \PDO
*/
private $dbh;
@@ -24,7 +22,7 @@ class PatchRepository
/**
* Class constructor.
*/
- public function __construct(Database $dbh)
+ public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
$this->uploadsDir = BUG_PATCHTRACKER_TMPDIR;
@@ -56,7 +54,7 @@ class PatchRepository
$arguments = [$bugId, $patch, $revision];
- return $this->dbh->prepare($sql)->execute($arguments)->fetchOne();
+ return
$this->dbh->prepare($sql)->execute($arguments)->fetch(\PDO::FETCH_NUM)[0];
}
/**
@@ -83,7 +81,7 @@ class PatchRepository
WHERE bugdb_id = ? AND patch = ? AND revision = ?
';
- if ($this->dbh->prepare($sql)->execute([$bugId, $name,
$revision])->fetchOne()) {
+ if ($this->dbh->prepare($sql)->execute([$bugId, $name,
$revision])->fetch(\PDO::FETCH_NUM)[0]) {
$contents = @file_get_contents($this->getPatchPath($bugId, $name,
$revision));
if (!$contents) {
diff --git a/src/Repository/PullRequestRepository.php
b/src/Repository/PullRequestRepository.php
index 64ab66a..89a72ce 100644
--- a/src/Repository/PullRequestRepository.php
+++ b/src/Repository/PullRequestRepository.php
@@ -9,13 +9,14 @@ class PullRequestRepository
{
/**
* Database handler.
+ * @var \PDO
*/
private $dbh;
/**
* Class constructor.
*/
- public function __construct($dbh)
+ public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
}
diff --git a/src/Utils/GitHub.php b/src/Utils/GitHub.php
index c551959..b31421e 100644
--- a/src/Utils/GitHub.php
+++ b/src/Utils/GitHub.php
@@ -9,6 +9,7 @@ class GitHub
{
/**
* Database handler.
+ * @var \PDO
*/
private $dbh;
@@ -30,7 +31,7 @@ class GitHub
/**
* Class constructor
*/
- public function __construct($dbh)
+ public function __construct(\PDO $dbh)
{
$this->dbh = $dbh;
}
diff --git a/src/Utils/PatchTracker.php b/src/Utils/PatchTracker.php
index 127831a..028f9f1 100644
--- a/src/Utils/PatchTracker.php
+++ b/src/Utils/PatchTracker.php
@@ -3,7 +3,6 @@
namespace App\Utils;
use App\Utils\Uploader;
-use App\Database\Database;
/**
* Service for handling uploaded patches.
@@ -12,7 +11,7 @@ class PatchTracker
{
/**
* Database handler.
- * @var Database
+ * @var \PDO
*/
private $dbh;
@@ -49,7 +48,7 @@ class PatchTracker
/**
* Class constructor.
*/
- public function __construct(Database $dbh, Uploader $uploader)
+ public function __construct(\PDO $dbh, Uploader $uploader)
{
$this->dbh = $dbh;
$this->uploadsDir = BUG_PATCHTRACKER_TMPDIR;
diff --git a/www/admin/index.php b/www/admin/index.php
index f7952a5..ebb905b 100644
--- a/www/admin/index.php
+++ b/www/admin/index.php
@@ -59,7 +59,7 @@ if ($action === 'phpinfo') {
");
echo "<dl>\n";
- while ($row = $res->fetchRow(PDO::FETCH_ASSOC)) {
+ while ($row = $res->fetch()) {
echo "<dt>", $row['name'], ": </dt>\n<dd>",
mailto_list(explode(',', $row['list_email'])), "</dd>\n";
}
echo "</dl>\n";
@@ -73,7 +73,7 @@ if ($action === 'phpinfo') {
echo "<h3>List Responses</h3>\n";
$rows = [];
- while ($row = $res->fetchRow(PDO::FETCH_ASSOC)) {
+ while ($row = $res->fetch()) {
// This is ugly but works (tm)
$row['message'] = nl2br($row['message']);
@@ -86,13 +86,13 @@ if ($action === 'phpinfo') {
$sql = "SELECT version() mysql_version\n";
- while ($row = $res->fetchRow(PDO::FETCH_NUM)) {
+ while ($row = $res->fetch(\PDO::FETCH_NUM)) {
$table = $row[0];
$sql .= "\t, (SELECT COUNT(*) FROM `$table`) `cnt_$table`\n";
}
$res = $dbh->query($sql);
- $row = $res->fetchRow(PDO::FETCH_ASSOC);
+ $row = $res->fetch();
echo "<p>Running MySQL <b>".$row['mysql_version']."</b></p>";
unset($row['mysql_version']);
@@ -110,7 +110,7 @@ if ($action === 'phpinfo') {
$rows = [];
$res = $dbh->query("SHOW TABLE STATUS");
echo "<h3>Table status:</h3>\n";
- while ($row = $res->fetchRow(PDO::FETCH_ASSOC)) {
+ while ($row = $res->fetch()) {
$rows[] = $row;
}
diff --git a/www/api.php b/www/api.php
index 4c664ee..4a07baf 100644
--- a/www/api.php
+++ b/www/api.php
@@ -27,7 +27,7 @@ if ($type === 'docs' && $action === 'closed' && $interval) {
";
//@todo add error handling
- $rows = $dbh->prepare($query)->execute([])->fetchAll(PDO::FETCH_ASSOC);
+ $rows = $dbh->prepare($query)->execute([])->fetchAll();
if (!$rows) {
echo 'The fail train has arrived.';
exit;
diff --git a/www/bug-pwd-finder.php b/www/bug-pwd-finder.php
index ffe8a38..b124b22 100644
--- a/www/bug-pwd-finder.php
+++ b/www/bug-pwd-finder.php
@@ -29,7 +29,7 @@ if (isset($_POST['captcha']) && $bug_id != '') {
$query = "SELECT email, passwd FROM bugdb WHERE id =
'{$bug_id}'";
// Run the query
- $row =
$dbh->prepare($query)->execute()->fetchRow(PDO::FETCH_ASSOC);
+ $row = $dbh->prepare($query)->execute()->fetch();
if (is_null($row)) {
$errors[] = "Invalid bug id provided: #{$bug_id}";
diff --git a/www/index.php b/www/index.php
index b744d08..40e56ac 100644
--- a/www/index.php
+++ b/www/index.php
@@ -17,7 +17,7 @@ if($_SERVER['REQUEST_URI'] == '/random') {
$query = "SELECT id FROM bugdb WHERE status NOT IN('Closed', 'Not a
bug', 'Duplicate', 'Spam', 'Wont fix', 'No Feedback') AND private = 'N' ORDER
BY RAND() LIMIT 1";
$result = $dbh->prepare($query)->execute();
- $id = $result->fetchRow();
+ $id = $result->fetch(\PDO::FETCH_NUM);
redirect("bug.php?id={$id[0]}");
}
diff --git a/www/lstats.php b/www/lstats.php
index ff8cc20..2a22c4c 100644
--- a/www/lstats.php
+++ b/www/lstats.php
@@ -23,14 +23,14 @@ function get_status_count ($status, $category = '')
$excluded = "'Feature/Change Request', 'Systems problem', 'Website
Problem', 'PEAR related', 'PECL related', 'Documentation problem', 'Translation
problem', 'PHP-GTK related', 'Online Doc Editor problem'";
if ($category != '') {
- $query.= " {$status} AND bug_type = 'Bug' AND package_name = '"
. $dbh->escape($category). "' ";
+ $query.= " {$status} AND bug_type = 'Bug' AND package_name = "
. $dbh->quote($category);
} else {
$query.= " status='{$status}' ";
}
$query.= "AND bug_type NOT IN({$excluded})";
$res = $dbh->prepare($query)->execute([]);
- $row = $res->fetchRow(PDO::FETCH_NUM);
+ $row = $res->fetch(\PDO::FETCH_NUM);
return $row[0];
}
diff --git a/www/report.php b/www/report.php
index 017cea1..7009edb 100644
--- a/www/report.php
+++ b/www/report.php
@@ -122,7 +122,7 @@ if (isset($_POST['in'])) {
WHERE bug = ?
ORDER BY id DESC
LIMIT 1
- ")->execute([$row['id']])->fetchOne();
+
")->execute([$row['id']])->fetch(\PDO::FETCH_NUM)[0];
$summary = $row['ldesc'];
if (strlen($summary) > 256) {
diff --git a/www/stats.php b/www/stats.php
index 8b161c4..1afc810 100644
--- a/www/stats.php
+++ b/www/stats.php
@@ -58,7 +58,7 @@ $query = "
$result = $dbh->prepare($query)->execute();
-while ($row = $result->fetchRow(PDO::FETCH_ASSOC)) {
+while ($row = $result->fetch()) {
$pkg_tmp[$row['status']][$row['package_name']] = $row['quant'];
@$pkg_total[$row['package_name']] += $row['quant'];
@$all[$row['status']] += $row['quant'];
@@ -160,7 +160,7 @@ $query = " SELECT DATE_FORMAT(ts1, '%Y-%m') as d,
$result = $dbh->prepare($query)->execute();
$last_date = null;
-while ($row = $result->fetchRow(PDO::FETCH_ASSOC)) {
+while ($row = $result->fetch()) {
if ($row['d'] != $last_date) {
if ($last_date !== null) {
echo "</table>\n\n";
diff --git a/www/vote.php b/www/vote.php
index 94df5fe..e3e0a87 100644
--- a/www/vote.php
+++ b/www/vote.php
@@ -20,7 +20,7 @@ $reproduced = (int) $_POST['reproduced'];
$samever = isset($_POST['samever']) ? (int) $_POST['samever'] : 0;
$sameos = isset($_POST['sameos']) ? (int) $_POST['sameos'] : 0;
-if (!$dbh->prepare("SELECT id FROM bugdb WHERE id= ? LIMIT
1")->execute([$id])->fetchOne()) {
+if (!$dbh->prepare("SELECT id FROM bugdb WHERE id= ? LIMIT
1")->execute([$id])->fetch(\PDO::FETCH_NUM)[0]) {
session_start();
// Authenticate
@@ -63,7 +63,7 @@ $ip = ip2long(get_real_ip());
// Check whether the user has already voted on this bug.
$bug_check = $dbh->prepare("SELECT bug, ip FROM bugdb_votes WHERE bug = ? AND
ip = ? LIMIT 1")
->execute([$id, $ip])
- ->fetchRow();
+ ->fetch(\PDO::FETCH_BOTH);
if (empty($bug_check)) {
// If the user vote isn't found, create one.
--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php