所以我最终开始重构我的PHP office应用程序的基础:我基于单例PDO类添加了新功能,我计划在整个应用程序中部署它.这是非常简单和工作(现在)应该:
class DB {
protected static $instance;
protected function __construct() {}
public static function getInstance()
{
if( empty( self::$instance ) )
{
$dsn = 'pgsql:host=' . Config::$a .
';dbname=' . Config::$b .
';port=' . Config::$c .
';connect_timeout=15';
$db_user = Config::$d;
$db_pass = Config::$e;
try
{
self::$instance = new PDO( $dsn, $db_user, $db_pass );
self::$instance->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
new Log( 6, "DB Class failed to connect to dbase: $e" );
}
}
return self::$instance; …Run Code Online (Sandbox Code Playgroud) 考虑这个相当简单的SQL查询:
"SELECT * FROM transactions
WHERE amount BETWEEN $cost_amount AND 0
AND acc_int IN ('Contant', '647-0191181-84')
AND dos_costs_id IS NULL
AND date + interval '30 days' >= to_date('$cost_date', 'YYYY-MM-DD')
ORDER BY (amount <> to_number('$cost_amount','99999999D99')), date DESC"
Run Code Online (Sandbox Code Playgroud)
我已经使用这个确切的查询两年了,以显示我们的传入交易的帐户上的所有可能的交易.所有这些"金额"都是积极的浮动.
现在我正在重复使用查询传出事务,因此金额总是负数.每当金额为整数时,这都有效,但只要值为浮点数就会停止.因此,值前面的' - '和数量末尾的'逗号和两个尾随数字'的组合会返回语法错误,fe:
Query failed: ERROR: syntax error at or near "," LINE 2: WHERE amount BETWEEN -327,13 AND 0
Run Code Online (Sandbox Code Playgroud)
我试过在金额附近添加引号,但这没有帮助.