2
對不起,我的英文。 我想創建一個簡單的網站,將從MySQL數據庫中獲取數據並將其顯示在頁面上。 我有兩個問題:swi prolog mysql + web
% database.pl
:- module(database,
[ create_db_connect/0,
use_database/0,
query_to_database/1,
disconnect_database/0
]).
:- use_module(library(odbc)).
create_db_connect :-
odbc_connect('test', _,
[ user('root'),
password('123')
alias(myblog),
open(once)
]).
use_database :-
odbc_query(myblog, 'use test', _).
query_to_database(X):-
odbc_query(myblog, 'SELECT data FROM testtable where id = 4', row(X)).
disconnect_database :- odbc_disconnect(myblog).
導入此模塊中的主要文件:
% el.pl
:- use_module(library(http/thread_httpd)).
:- use_module(library(http/http_dispatch)).
:- use_module(library(http/html_write)).
:- use_module(library(http/http_parameters)).
:- use_module(library(http/html_head)).
:- use_module(database).
:- http_handler(root(.), home, []).
server(Port): -
http_server(http_dispatch, [port(Port)]).
home(_Request): -
reply_html_page (
title('Sql'),
[\ main_page
]).
main_page -->
create_db_connect,
use_database,
query_to_database(X),
disconnect_database,
html(div('id="tab_c2"', p('~w')-[X])).
在這種情況下,得到錯誤
1)在單獨的模塊做了一個數據庫工作:
Warning: The predicates below are not defined. If these are defined
Warning: at runtime using assert/1, use: - dynamic Name/Arity.
Warning:
Warning: create_db_connect/2, which is referenced by
Warning: /root/prologDev/el.pl:56:17: 1-st clause of main_page/2
但爲什麼?我在模塊database.pl中定義了它!
2)雖然我不喜歡這個決定,但我調整了這個模塊database.pl:
:- module (database,
[ create_db_connect/2,
use_database/2,
query_to_database/3,
disconnect_database/2
]).
:- use_module(library(odbc)).
create_db_connect(_, _) :-
odbc_connect('test', _,
[ user('root'),
password('123'),
alias(myblog),
open(once)
]).
use_database(_, _) :-
odbc_query(myblog, 'use test', _).
query_to_database(X, _, _) :-
odbc_query(myblog, 'SELECT data FROM testtable where id = 4', row(X)).
disconnect_database(_, _) :- odbc_disconnect(myblog).
而現在,該頁面是空的。 當我停止swipl whit halt時,發生錯誤: my_thread_global_end()中的錯誤:1個線程沒有退出。
我做錯了什麼?