任何人都可以帮我在我的数据库中应用它?

时间:2016-04-06 16:57:48

标签: prolog

query(USER, PWD, DB, QUERY, Columns, Rows) :-
    atom_concat('-p', PWD, PPWD),
    process_create(path(mysql), ['-u', USER, PPWD, '-D', DB, '-e', QUERY], [stdout(pipe(Out)),stderr(std)]),
    read_record(Out, Columns),
    read_records(Out, Rows).

read_record(Out, Fields) :-
    read_line_to_codes(Out, Codes),
    Codes \= end_of_file,
    atom_codes(Line, Codes),
    atomic_list_concat(Fields, '\t', Line).

read_records(Out, [Record|Rs]) :-
    read_record(Out, Record),
    !, read_records(Out, Rs).
read_records(Out, []) :-
    close(Out).

assertz(Clause).

2 个答案:

答案 0 :(得分:1)

你真的没有多大意义。通过应用于数据库,我假设您有一系列基础事实,并且您希望这组谓词可以随之运行。

如果是这样,你需要阅读prolog中的统一。

答案 1 :(得分:1)

正如我在评论中所描述的,似乎很清楚USER是您的数据库用户名,PWD是用户的密码,DB是数据库名称,{{1是您要执行的查询。 QUERY是您要执行的完整MySQL查询字符串。有关查询的所有信息(包括哪些表,哪些字段和条件)都包含在该查询字符串中。它是一个标准的MySQL查询字符串。据了解,您提供的用户名和密码具有执行您在QUERY中提供的查询的适当权限。

例如,假设您有一个名为QUERY的MySQL数据库。 假设mydb有一个名为mydb的表,如下所示:

mytable

进一步假设用户id foo bar -- --- --- 1 ick poo 2 oh yeah 可以使用密码mydb访问您的MySQL数据库fred。然后,您可以使用您显示的Prolog代码进行以下查询:

freds=password

将产生:

?- query('fred', 'freds=password', 'mydb', 'select * from mytable', Cols, Rows).

或者你可以这样做:

Cols = ['id', 'foo', 'bar']
Rows = [['1', 'ick', 'poo'], ['2', 'oh', 'yeah']]

将产生:

?- query('fred', 'freds=password', 'mydb', 'select id, bar from mytable limit 1', Cols, Rows).