2012-01-06 19 views
7

Trước tiên, tôi muốn thông báo về vụ việc để tránh sự hiểu lầm.Làm thế nào để tải phần mở rộng sqlite trong PDO?

Với tiện ích mở rộng sqlite, tôi đề cập đến phần mở rộng của Sqlite như FTS chứ không phải phần mở rộng sqlite của PHP.

Tôi đã sử dụng PDO Sqlite trong ứng dụng của mình, nó không thể thay đổi được.

Như tôi thấy here, mở rộng Sqlite có thể được nạp như truy vấn xem dưới đây:

SELECT load_extension('xyz.so'); 
$db = new PDO ('sqlite:qwert.db'); 
$db->query("SELECT load_extension('myextension.so');"); 
$db->query("SELECT myfunction(name) FROM table"); 
$rows = $db->fetchAll(PDO::FETCH_CLASS, 'stdClass'); 

Lưu ý: myfunction là phương pháp myextension

Nhưng khi tôi thử nghiệm với truy vấn này từ PDO, nó trả về thông báo "không được ủy quyền".

Đối với chỉ mục đích thử nghiệm, tôi đã cố gắng PHP's Sqlite3 extension để tải phần mở rộng bằng cách sử dụng mã bên dưới:

$db = new SQLite3('qwer.db'); 
$db->loadExtension('xyz.so'); 

Nó hoạt động

Như tôi biết rằng PDO Sqlite hasnot một phương pháp như loadExtension để tải các phần mở rộng

Bất kỳ ý tưởng nào tôi có thể xử lý việc này?

+0

Bạn nên thêm mã của bạn như thế nào bạn kết nối với cơ sở dữ liệu SQLite và cho thấy làm thế nào bạn bắn 'cái CHỌN load' truy vấn. – hakre

+0

Lỗi xảy ra ở đâu? Khi tải phần mở rộng hoặc khi gọi 'myfunction'? –

+0

Khi tải tiện ích mở rộng – WebolizeR

Trả lời

6

không thể tìm thấy cờ trình biên dịch và chúng tôi đã giải quyết nó bằng một bản hack nhanh chóng trong phần mở rộng pdo_sqlite. vá sqlite_driver.c với sqlite3_enable_load_extension() từ API sqlite3.

--- php-5.3.7.old/ext/pdo_sqlite/sqlite_driver.c 2012-01-06 11:04:44.000000000 -0500 
+++ sqlite_driver.c 2012-01-06 08:16:58.000000000 -0500 
@@ -718,6 +718,8 @@ 
     goto cleanup; 
    } 

+ sqlite3_enable_load_extension(H->db, 1); 
+ 
    if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) { 
     sqlite3_set_authorizer(H->db, authorizer, NULL); 
    } 

Hope this helps ...

Các vấn đề liên quan