be explicit about using FFS-PHP's PDO not vanilla PDO
This commit is contained in:
parent
29994e9613
commit
861def1aa3
4 changed files with 64 additions and 53 deletions
|
@ -34,6 +34,7 @@
|
||||||
"google/recaptcha" : "~1.1",
|
"google/recaptcha" : "~1.1",
|
||||||
"dapphp/securimage" : "3.6.*",
|
"dapphp/securimage" : "3.6.*",
|
||||||
"shish/eventtracer-php" : "dev-master",
|
"shish/eventtracer-php" : "dev-master",
|
||||||
|
"shish/ffsphp" : "0.0.*",
|
||||||
"shish/microcrud" : "dev-master",
|
"shish/microcrud" : "dev-master",
|
||||||
"enshrined/svg-sanitize" : "0.8.*",
|
"enshrined/svg-sanitize" : "0.8.*",
|
||||||
|
|
||||||
|
|
69
composer.lock
generated
69
composer.lock
generated
|
@ -4,14 +4,14 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "1a344925ec0ffdb23fb554973ae897bd",
|
"content-hash": "599bc5009cfcad0fdbf40925bbed4493",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bower-asset/jquery",
|
"name": "bower-asset/jquery",
|
||||||
"version": "1.12.4",
|
"version": "1.12.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git@github.com:jquery/jquery-dist.git",
|
"url": "https://github.com/jquery/jquery-dist.git",
|
||||||
"reference": "5e89585e0121e72ff47de177c5ef604f3089a53d"
|
"reference": "5e89585e0121e72ff47de177c5ef604f3089a53d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
|
@ -340,24 +340,67 @@
|
||||||
"homepage": "https://github.com/shish/eventtracer-php",
|
"homepage": "https://github.com/shish/eventtracer-php",
|
||||||
"time": "2019-11-21T13:07:27+00:00"
|
"time": "2019-11-21T13:07:27+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "shish/ffsphp",
|
||||||
|
"version": "v0.0.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/shish/ffsphp.git",
|
||||||
|
"reference": "6b1874cf05b0b6bbdf7b118ca081097d1f830cd7"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/shish/ffsphp/zipball/6b1874cf05b0b6bbdf7b118ca081097d1f830cd7",
|
||||||
|
"reference": "6b1874cf05b0b6bbdf7b118ca081097d1f830cd7",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "8.*"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"FFSPHP\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Shish",
|
||||||
|
"email": "webmaster@shishnet.org",
|
||||||
|
"homepage": "http://shishnet.org",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A collection of workarounds for stupid PHP things",
|
||||||
|
"homepage": "https://github.com/shish/ffsphp",
|
||||||
|
"time": "2019-11-25T15:37:09+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "shish/microcrud",
|
"name": "shish/microcrud",
|
||||||
"version": "dev-master",
|
"version": "dev-master",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/shish/microcrud.git",
|
"url": "https://github.com/shish/microcrud.git",
|
||||||
"reference": "6e297d376904e34986320896f6a1c83b377a54cc"
|
"reference": "415ef0d7cf54177783cceaf031e5b7a0e9b7aa11"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/shish/microcrud/zipball/6e297d376904e34986320896f6a1c83b377a54cc",
|
"url": "https://api.github.com/repos/shish/microcrud/zipball/415ef0d7cf54177783cceaf031e5b7a0e9b7aa11",
|
||||||
"reference": "6e297d376904e34986320896f6a1c83b377a54cc",
|
"reference": "415ef0d7cf54177783cceaf031e5b7a0e9b7aa11",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"php": ">=7.2",
|
"php": ">=7.2",
|
||||||
"shish/microhtml": "dev-master"
|
"shish/ffsphp": "0.0.*",
|
||||||
|
"shish/microhtml": "0.0.*"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "8.*"
|
"phpunit/phpunit": "8.*"
|
||||||
|
@ -386,20 +429,20 @@
|
||||||
"crud",
|
"crud",
|
||||||
"generator"
|
"generator"
|
||||||
],
|
],
|
||||||
"time": "2019-11-24T13:37:36+00:00"
|
"time": "2019-11-25T22:50:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "shish/microhtml",
|
"name": "shish/microhtml",
|
||||||
"version": "dev-master",
|
"version": "v0.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/shish/microhtml.git",
|
"url": "https://github.com/shish/microhtml.git",
|
||||||
"reference": "ac1cd313555d81b7b45e162291eed8d0a8165511"
|
"reference": "76d923e69d140c638995bbe6f24085a9108950f1"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/shish/microhtml/zipball/ac1cd313555d81b7b45e162291eed8d0a8165511",
|
"url": "https://api.github.com/repos/shish/microhtml/zipball/76d923e69d140c638995bbe6f24085a9108950f1",
|
||||||
"reference": "ac1cd313555d81b7b45e162291eed8d0a8165511",
|
"reference": "76d923e69d140c638995bbe6f24085a9108950f1",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -432,7 +475,7 @@
|
||||||
"generator",
|
"generator",
|
||||||
"html"
|
"html"
|
||||||
],
|
],
|
||||||
"time": "2019-11-24T02:10:21+00:00"
|
"time": "2019-11-25T18:12:07+00:00"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
|
@ -1131,7 +1174,7 @@
|
||||||
"myclabs/deep-copy": "^1.9.1",
|
"myclabs/deep-copy": "^1.9.1",
|
||||||
"phar-io/manifest": "^1.0.3",
|
"phar-io/manifest": "^1.0.3",
|
||||||
"phar-io/version": "^2.0.1",
|
"phar-io/version": "^2.0.1",
|
||||||
"php": "^7.2",
|
"php": "^7.3",
|
||||||
"phpspec/prophecy": "^1.8.1",
|
"phpspec/prophecy": "^1.8.1",
|
||||||
"phpunit/php-code-coverage": "^7.0.7",
|
"phpunit/php-code-coverage": "^7.0.7",
|
||||||
"phpunit/php-file-iterator": "^2.0.2",
|
"phpunit/php-file-iterator": "^2.0.2",
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
use FFSPHP\PDO;
|
||||||
|
|
||||||
abstract class DatabaseDriver
|
abstract class DatabaseDriver
|
||||||
{
|
{
|
||||||
public const MYSQL = "mysql";
|
public const MYSQL = "mysql";
|
||||||
|
@ -44,29 +46,9 @@ class Database
|
||||||
|
|
||||||
private function connect_db(): void
|
private function connect_db(): void
|
||||||
{
|
{
|
||||||
# FIXME: detect ADODB URI, automatically translate PDO DSN
|
$this->db = new PDO(DATABASE_DSN, [
|
||||||
|
|
||||||
/*
|
|
||||||
* Why does the abstraction layer act differently depending on the
|
|
||||||
* back-end? Because PHP is deliberately retarded.
|
|
||||||
*
|
|
||||||
* http://stackoverflow.com/questions/237367
|
|
||||||
*/
|
|
||||||
$matches = [];
|
|
||||||
$db_user=null;
|
|
||||||
$db_pass=null;
|
|
||||||
if (preg_match("/user=([^;]*)/", DATABASE_DSN, $matches)) {
|
|
||||||
$db_user=$matches[1];
|
|
||||||
}
|
|
||||||
if (preg_match("/password=([^;]*)/", DATABASE_DSN, $matches)) {
|
|
||||||
$db_pass=$matches[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
$db_params = [
|
|
||||||
PDO::ATTR_PERSISTENT => DATABASE_KA,
|
|
||||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||||
];
|
]);
|
||||||
$this->db = new PDO(DATABASE_DSN, $db_user, $db_pass, $db_params);
|
|
||||||
|
|
||||||
$this->connect_engine();
|
$this->connect_engine();
|
||||||
$this->engine->init($this->db);
|
$this->engine->init($this->db);
|
||||||
|
@ -185,25 +167,11 @@ class Database
|
||||||
if (is_null($this->db)) {
|
if (is_null($this->db)) {
|
||||||
$this->connect_db();
|
$this->connect_db();
|
||||||
}
|
}
|
||||||
$stmt = $this->db->prepare(
|
return $this->db->execute(
|
||||||
"-- " . str_replace("%2F", "/", urlencode(@$_GET['q'])). "\n" .
|
"-- " . str_replace("%2F", "/", urlencode(@$_GET['q'])). "\n" .
|
||||||
$query
|
$query,
|
||||||
|
$args
|
||||||
);
|
);
|
||||||
assert(!is_bool($stmt));
|
|
||||||
// $stmt = $this->db->prepare($query);
|
|
||||||
if (!array_key_exists(0, $args)) {
|
|
||||||
foreach ($args as $name=>$value) {
|
|
||||||
if (is_int($value)) {
|
|
||||||
$stmt->bindValue(':'.$name, $value, PDO::PARAM_INT);
|
|
||||||
} else {
|
|
||||||
$stmt->bindValue(':'.$name, $value, PDO::PARAM_STR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$stmt->execute();
|
|
||||||
} else {
|
|
||||||
$stmt->execute($args);
|
|
||||||
}
|
|
||||||
return $stmt;
|
|
||||||
} catch (PDOException $pdoe) {
|
} catch (PDOException $pdoe) {
|
||||||
throw new SCoreException($pdoe->getMessage(), $query);
|
throw new SCoreException($pdoe->getMessage(), $query);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,6 @@ function _d(string $name, $value): void
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_d("DATABASE_DSN", null); // string PDO database connection details
|
_d("DATABASE_DSN", null); // string PDO database connection details
|
||||||
_d("DATABASE_KA", true); // string Keep database connection alive
|
|
||||||
_d("DATABASE_TIMEOUT", 10000);// int Time to wait for each statement to complete
|
_d("DATABASE_TIMEOUT", 10000);// int Time to wait for each statement to complete
|
||||||
_d("CACHE_DSN", null); // string cache connection details
|
_d("CACHE_DSN", null); // string cache connection details
|
||||||
_d("DEBUG", false); // boolean print various debugging details
|
_d("DEBUG", false); // boolean print various debugging details
|
||||||
|
|
Reference in a new issue