php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #68393 PDO Does Not Produce Exception For 'sqlite:' With Missing Filepath
Submitted: 2014-11-10 21:59 UTC Modified: 2015-06-22 15:05 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: kyra at existing dot me Assigned:
Status: Verified Package: PDO SQLite
PHP Version: 5.6.2 OS: Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: kyra at existing dot me
New email:
PHP Version: OS:

 

 [2014-11-10 21:59 UTC] kyra at existing dot me
Description:
------------
I was passing the SQLite filepath portion of the DSN as a variable and happened to pass an empty string, but PDO did not raise an Exception, and gave no indication the connection had failed.

If you check out http://3v4l.org/o1k3M you can see at some point after PHP 5.2.14 that this behavior began.

Test script:
---------------
$db = new PDO('sqlite:');

Expected result:
----------------
Fatal error: Uncaught exception 'PDOException' with message...


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-11-10 22:38 UTC] salathe@php.net
From SQLite's point of view, this looks to be okay.

Here's a snippet from the SQLite docs[1], in the "Opening
A New Database Connection" section[2]:

  If the filename is an empty string, then a private,
  temporary on-disk database will be created. This 
  private database will be automatically deleted as 
  soon as the database connection is closed.

[1] http://www.sqlite.org/c3ref/intro.html
[2] http://www.sqlite.org/c3ref/open.html
 [2014-11-10 22:52 UTC] kyra at existing dot me
Is this temp database being created in /tmp or in the current directory?

Also, isn't this basically the same thing as using :memory to create a temp db, but on disk? I would have thought there would be a :disk option instead of assuming the user wanted to create a temp db on disk, and had not made a coding error.

Is there, or should there be a note about this behavior in the PHP docs? I know I was stumped by my try/catch not working as expected to warn me.
 [2015-06-22 12:19 UTC] mbeccati@php.net
-Type: Bug +Type: Documentation Problem
 [2015-06-22 12:19 UTC] mbeccati@php.net
Switching to documentation problem. Maybe it would be worth to add a note?
 [2015-06-22 15:05 UTC] cmb@php.net
-Status: Open +Status: Verified
 [2015-06-22 15:05 UTC] cmb@php.net
The behavioral change has been introduced as fix for bug
#52010[1]. How temporary databases are handled by Sqlite3 is
#detailed in [2].

[1] <http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_sqlite/sqlite_driver.c?r1=300612&r2=300611&pathrev=300612>
[2] <https://www.sqlite.org/inmemorydb.html#temp_db>
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sun Dec 15 23:01:27 2019 UTC