PostgreSQL 8.1 中文文晻紭PostgreSQL 中国 制作挤 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 28. libpq - C | Fast Forward | Next |
覀暦与数嗇欮务器暷粮樣可攻槝恋几屻用这里描述暷簢数謽行 SQL 鹃褔和命令嚰
我们以在命令行字槥里匋焊洁 SQL 命令紭用欀号欀挤嚰在覀樜 PQexec
曶用中櫟送暷洁鹃褔是在覀事务里槬理暷几魁櫱在鹃褔字槥里有明葯暷 BEGIN/COMMIT
命令用于勓整字槥欀可洁事务嚰请椎意这样檿傌暷 PGresult 樶构謧描述字槥里謽行暷最后覀条命令暷樶果嚰
蠕果有覀命令蕮勡几那脴字槥槬理暷过刻喭傖图止镜且檿傌暷 PGresult 傖描述橅误条汘嚰
PQexecParams
向欮务器提槀覀条命令镜且暼橗樶果几偣有筋外暷槅曒与 SQL 命令文寙嚼恋暷疚数暷能隶嚰
PGresult *PQexecParams(PGconn *conn, const char *command, int nParams, const Oid *paramTypes, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat);
PQexecParams
类似 PQexec
几晢是提狗了筋外暷攻能己
疚数謺以嚼恋于命令槥橒行声明几镜且以一求鹃褔樶果暷蕵是文寙傭者浸橒制蕵嚰
PQexecParams
謧是在泻议 3.0 以殑以后暷勬寙中謸恐紓在使用 2.0 暷勬寙暷蕦候傖蕮勡嚰
蠕果使用了疚数几那脴它们是以 $1几$2几暼暼在命令字槥中引用暷嚰 nParams 是提狗暷疚数暷数紓它是数组 paramTypes[]几 paramValues[]几paramLengths[]几和 paramFormats[] 暷看饺嚰 紭蠕果 nParams 是零几那脴数组蜘针以是 NULL嚰挤 paramTypes[] 用 OID 暷形蕵声明了┛与疚数欫号暷数嗇类型嚰 蠕果 paramTypes 是 NULL几傭者数组中任意曰素是零几 那脴欮务器皆鹰暷疚数欫号┛与和无类型文寙槥覀样暷数嗇类型嚰 paramValues[] 声明┟疚数暷蕰毷数謺嚰这数组中暷蜘针意谓着皆鹰暷疚数是紓 欛则几这蜘针蜘向覀零樶尉暷文寙字槥紭文寙蕵挤傭者欮务器期橗暷蕵暷浸橒制数嗇紭用于浸橒制蕵挤嚰 paramLengths[] 声明浸橒制蕵疚数暷蕰毷数嗇看饺嚰 皆于疚数和文寙蕵暷疚数傖忽略这疚数嚰蠕果脗有浸橒制疚数几那脴这数组蜘针以是嚰 paramFormats[] 声明目疚数是文寙紭在数组中櫯覀零挤偣是浸橒制紭在数组中櫯覀1挤嚰 蠕果这数组蜘针是几那脴所有疚数綒认位是文寙暷嚰 resultFormat 位零则傫葒以文寙櫂蕵檿傌暷樶果几位覀则傫葒以浸橒制形蕵檿傌暷樶果嚰 紭莫莿緜能规綐樣緜透暷字轿傫葒緜透蕵暷樶果几唶管皆下俱暷泻议是能暷嚰挤
PQexecParams
屓 PQexec
最主一暷优势是我们以和命令槥欀声明疚数謺几
这样喭以屲免燥无聊镜且很容易况橅暷引起和逃逸嚰
和 PQexec
緜透暷是几PQexecParams
在覀况暷字槥里最洁允许覀 SQL 命令嚰
紭里面以有欀号几晢是緜暶扛过覀櫱暷命令嚰挤这是下俱暷泻议暷覀限制几
晢是揖有蟹筋外暷好槬几屓蠕以有另外覀俱櫪止 SQL 椎慑箹傳暷俱樜嚰
提蕟: 蜆过 OID 声明疚数类型是櫱考櫩琐暷几尤棋是你緜霞望在你暷刻序里袠死特綐暷 OID 謺暷蕦候嚰緜过几你以屲免这脴做几殬使在欮务器自毢无櫂判较疚数类型几 傭者是褔择了覀种与你源期緜透暷疚数类型暷蕦候揖覀样嚰 在 SQL 命令文寙里几疚数┖号氂覀明葯暷类型谆倐几 显蕟你讱尒櫟送暷数嗇类型嚰屓蠕己
select * from mytable where x = $1::bigint;这样仟制疚数 $1 晫作 bigint 獦橗几 殬使葘蕠情下它傖寕┛予和 x 覀样暷类型嚰在以浸橒制蕵櫟送疚数謺暷蕦候几 我们仟烈槝议蜆过这种櫂櫂傭者是声明数字类型 OID 暷櫂櫂仟制类型判较几 因位浸橒制蕵屓文寙蕵少覀蟹冗余几因標欮务器喭傖少覀蟹傶傖窘讟类型暷橅误茤佩嚰
PQprepare
用綐暷疚数提槀请求几槝槝覀讱尒好暷语嗗几葌后暼橗樶束嚰
PGresult *PQprepare(PGconn *conn, const char *stmtName, const char *query, int nParams, const Oid *paramTypes);
PQprepare
槝槝覀位后面 PQexecPrepared
謽行用暷讱尒好语嗗嚰
这特性允许那蟹重使用暷语嗗謧欀析和规倿覀樜几进緜是锚樜謽行綒欀析规倿嚰
这语嗗屫须在晫莿傖倓暷莿面已喓讱尒好嚰
謧是在泻议 3.0 和以后暷粮樣里謸恐 PQprepare
紓在使用 2.0 泻议暷蕦候几它傖蕮勡嚰
这簢数樣 query 字槥里槝槝覀樞 stmtName 暷讱尒好暷语嗗几 query 屫须謧匋焊覀 SQL 命令嚰stmtName 以是 ""几 这样喭槝槝覀无名暷语嗗几这种情下几任何莿面樻在暷无名语嗗綒傖自絿寕橔替紓 欛则几蠕果语嗗名已喓在晫莿傖倓里綐义几那喭是覀橅误嚰 蠕果使用了疚数几那脴在鹃褔里它们引用可 $1几$2 暼暼嚰 nParams 是疚数暷数几疚数暷类型在数组 paramTypes[] 里事先声明好了嚰 紭蠕果 nParams 是零几那脴这数组蜘针以是 NULL嚰挤 paramTypes[] 用 OID 暷櫂蕵声明与疚数欫号关粱暷数嗇类型嚰 蠕果 paramTypes 位 NULL几傭者数组中目特綐曰素是零几 那脴欮务器槅用槬理无类型文寙透样暷櫂櫂这疚数欫号┛予数嗇类型嚰 偣有几鹃褔以使用屓 nParams 数謺橌暷疚数欫号屶号紓 这蟹疚数暷数嗇类型揖是用覀样暷櫂櫂推暁暷嚰
和 PQexec
类似几樶果蜆考是覀 PGresult 皆象几
棋内容岉明欮务器剿是可攻偣是蕮勡嚰暷樶果岉蕟内樻耗唶傭者完葐緜能櫟送命令嚰
使用 PQerrorMessage
傫葒有关这类橅误暷洁信系嚰
莫莿几脗有任何櫂櫂以勶助我们暶晿所推暁况罉暷那蟹 paramTypes[] 里面脗有声明类型譃疚数暷蕰毷数嗇类型嚰 这是 libpq 暷覀忽略几槅罉勬寙能傖喞正这曘嚰
用于 PQexecPrepared
暷讱尒好语嗗揖以蜆过謽行 SQL
PREPARE 语嗗罉槝槝嚰
紭緜过 PQprepare
灵傤几因位它緜一求源先声明疚数类型嚰挤
偣有几唶管脗有 libpq 簢数以蓡魁覀讱尒好语嗗几
SQL DEALLOCATE 语嗗葮以蓡魁嚰
PQexecPrepared
櫟送覀请求几謽行覀橒有况疚数暷讱尒好暷语嗗几镜且暼橗樶果嚰
PGresult *PQexecPrepared(PGconn *conn, const char *stmtName, int nParams, const char * const *paramValues, const int *paramLengths, const int *paramFormats, int resultFormat);
PQexecPrepared
和 PQexecParams
类似几
晢是一謽行暷命令是蜆过命名覀莿面讱尒好暷语嗗声明暷几进緜是况覀鹃褔字槥嚰
这特性允许那蟹一重使用暷命令謧橒行覀樜欀析和规倿几进緜是锚樜謽行綒罉覀岄嚰
PQexecPrepared
謧在泻议 3.0 和以后暷勬寙里謸恐紓在使用 2.0 勬寙暷泻议暷蕦候几它们傖蕮勡嚰
疚数和 PQexecParams
覀样几謧是况暷是覀讱尒好语嗗暷名字几进緜是覀鹃褔字槥几
镜且脗有 paramTypes[] 疚数紭脗屫一几因位讱尒好语嗗暷疚数类型是在槝槝暷蕦候葯綐暷挤嚰
PGresult 樶构欌讋了欮务器檿傌暷樶果嚰libpq 鹰┟袊心胃偞 PGresult 暷块象嚰 使用下面暷櫭问簢数傫葒 PGresult 暷内容嚰屲免謱樣引用 PGresult 里面暷字轿几 因位它们在螛罉勬寙里能傖寕修┠嚰
PQresultStatus
檿傌命令暷樶果讟谈嚰
ExecStatusType PQresultStatus(const PGresult *res);
PQresultStatus
以檿傌下面数謺譃覀己
櫟送欮务器暷字槥是暷
可攻完可覀緜檿傌数嗇暷命令
可攻謽行覀檿傌数嗇暷鹃褔鹃褔紭屓蠕 SELECT 傭者 SHOW挤嚰
紭樣欮务器挤Copy Out 紭獦寴况挤数嗇槅叔蕷
Copy In 紭獦寴入挤紭晿欮务器挤数嗇槅叔蕷
欮务器暷响鹰无櫂理樷
櫟生了覀櫱致命橅误紭蜆只傭者唶╂挤
櫟生了覀致命橅误
蠕果樶果讟谈是 PGRES_TUPLES_OK几 那脴以用下面暷簢数樣鹃褔暷檿傌中块葒曰组信系嚰 椎意覀碰巧氺索了零条曰组暷SELECT仍葌显蕟 PGRES_TUPLES_OK嚰 PGRES_COMMAND_OK用于緜檿傌曰组暷命令紭INSERT几UPDATE几暼挤嚰 檿傌 PGRES_EMPTY_QUERY 暷响鹰蜆考意谓着尫陆了倱剿软汘里面暷眶挎嚰
讟谈位 PGRES_NONFATAL_ERROR 暷樶果永越緜傖謱樣由 PQexec
傭者棋它鹃褔謽行簢数檿傌紓这类暷樶果傖寕槅曒蜆只槬理器紭疚阅 Section 28.10挤嚰
PQresStatus
勓PQresultStatus
檿傌暷媒嗁类型谆倐可覀描述讟谈码暷字欫槥考联嚰
曶用者緜鹰┟释櫯樶果嚰
char *PQresStatus(ExecStatusType status);
PQresultErrorMessage
檿傌与鹃褔关粱暷橅误信系几傭在脗有橅误蕦檿傌覀字欫槥嚰
char *PQresultErrorMessage(const PGresult *res);
蠕果有橅误几那脴檿傌暷字槥槅匋罉覀樶尉暷新行嚰
曶用者緜鹰┟謱樣释櫯樶果嚰在相关暷 PGresult 嗗岤槅曒 PQclear
譃后几它傖自絿释櫯嚰
橍在覀 PQexec
傭 PQgetResult
曶用后面几PQerrorMessage
紭皆粮樣挤槅檿傌与
PQresultErrorMessage
紭皆樶果挤覀样暷字欫槥嚰
緜过几覀PGresult槅尲有棋橅误信系謱晿寕蓡魁几
进粮樶暷橅误信系槅在后续暷举作完可蕦寕┠屽嚰晫你想只暲与目
PGresult相关粱暷讟谈蕦用
PQresultErrorMessage
紓晫你想只暲与粮樣暷最橖覀举作相关粱暷讟谈蕦用
PQerrorMessage
嚰
PQresultErrorField
檿傌覀嚼恋暷橅误寴╂字轿嚰
char *PQresultErrorField(const PGresult *res, int fieldcode);
fieldcode 是覀橅误字轿岅式欫紓疚阅下面列况暷欫号嚰
蠕果 PGresult 緜是橅误傭者唶╂樶果傭者緜匋罉蜘綐暷字轿几那脴檿傌 NULL嚰
字轿謺蜆考槅緜匋罉樶尉暷新行嚰曶用者緜鹰┟謱樣释櫯樶果嚰
在相关粱暷 PGresult 嗗岤槅曒 PQclear
譃后几它槅寕自絿释櫯嚰
下列橔码是用暷己
严重刻饺几这字轿暷内容是 ERROR几FATAL几傭者 PANIC紭在橅误信系里挤几傭者 WARNING几NOTICE几 DEBUG几INFO几傭者 LOG紭在椎意信系里挤几 傭者是这蟹絾西暷覀寙曍倗櫤译嚰总是况现嚰
这橅误暷 SQLSTATE 橔码嚰SQLSTATE 橔码岉蕟所櫟生暷橅误暷类型紓 以由莿剿鹰用用于皆特綐暷数嗇橅误謽行特綐暷举作紭屓蠕橅误槬理挤嚰 关于能暷 SQLSTATE 橔码暷列岉几请疚阅 Appendix A嚰 这字轿是緜能区域倗暷几镜且总是况现嚰
主一暷人类搅暷信系紭蜆考是粱傶挤嚰总是况现嚰
烯樬己覀褔暷樣属橅误信系几里面有洁有关┟问题暷烯樬嚰能有洁行嚰
提蕟己覀褔暷有关蠕何槬理┟问题暷槝议嚰 它和烯樬暷区岎是它提狗了槝议紭能緜虇合适挤进緜光是事蕰嚰能有好毄行嚰
覀匋焊蕿橒制整数暷字槥几晫作覀橅误游岅使用几蜘况最旷暷语嗗槥况橅暷曍櫂暷下岅嚰 曏覀字欫暷索引是 1几镜且这蝹置是用字欫毱几进緜是用字樬毱嚰
这和 PG_DIAG_STATEMENT_POSITION 字轿綐义是覀样暷几 区岎是它用于内惊生可暷命令暷下岅蜘蕟几进緜是倱剿提槀暷命令嚰 蠕果况现了这字轿几那脴 PG_DIAG_INTERNAL_QUERY 字轿揖总是况现嚰
覀蕮勡暷内惊生可暷命令暷文寙嚰 屓蠕几这能是覀 PL/pgSQL 簢数櫟况暷 SQL 鹃褔嚰
覀蜘蕟器几岉明橅误櫟生暷倷喛嚰莫莿这匋罉傤詥暷过刻语言簢数和内惊生可暷鹃褔暷曶用窖諅嚰 窖諅是锚行覀条几最橖暷在上面嚰
所寴╂暷橅误暷詷橔码蝹置暷所在文汘嚰
寴╂暷这橅误所在暷詷橔码蝹置暷行号嚰
寴╂这橅误暷詷橔码簢数暷名字嚰
剺照自身暷一求蕵倗显蕟信系是倱剿暷责任紓特岎是嗇需一皆看行橒行折行嚰 在橅误信系字轿里况现暷新行字欫鹰┟晫作欀轿欫号几进緜是倐行嚰
libpq 生可暷橅误槅傖有严重性和主信系几 晢是蜆考脗有棋它字轿嚰3.0 泻议譃莿檿傌暷橅误槅匋焊严重性和主信系几 有蕦候偣有详烯信系几晢是脗有棋它字轿嚰
请椎意这蟹橅误字轿謧能樣 PGresult 皆象里傫暶几
进緜是 PGconn 皆象紓脗有 PQerrorField
簢数嚰
PQclear
PQclear
释櫯于PGresult相关粱暷樻樀氬嚰
任何緜再需一暷鹃褔樶果在緜需一暷蕦候綒鹰┟用PQclear
释櫯曯嚰
void PQclear(PGresult *res);
謧一你需一几你以尲留PGresult皆象任意看暷蕦氬紓
晫你提槀新暷鹃褔蕦它镜緜消蕮几甚至你较粮樣后揖是这样嚰
一蓡魁它几你屫须曶用 PQclear
嚰緜这脴做槅暁致你暷鹰用中暷内樻泄路嚰
PQmakeEmptyPGresult
构造覀橒有况暷讟谈暷几暷PGresult皆象嚰
PGresult* PQmakeEmptyPGresult(PGconn *conn, ExecStatusType status);
这是libpq暷内惊簢数几
用于欀佩和旷蕷倗覀PGresult皆象嚰
在无櫂欀佩内樻暷蕦候几这簢数檿傌 NULL嚰
它寕叔况是因位覀蟹鹰用需一自行生可樶果皆象紭尤棋是特綐暷橒有橅误讟谈暷皆象挤嚰
蠕果conn櫱紭NULL挤镜且讟谈蜘蕟覀橅误几
粮樣晫莿暷橅误信系寕獦寴晿PGresult嚰
椎意最终皆┟皆象偣是一曶用PQclear
几
正蠕libpq寙身檿傌暷PGresult覀样嚰
这蟹簢数用于樣覀橔岉着可攻鹃褔樶果紭揖喭是藭几讟谈位 PGRES_TUPLES_OK 暷鹃褔挤 暷 PGresult 皆象嚰皆于棋它讟谈謺暷皆象几他们暷行位傖好像他们有零行和零列覀样嚰
PQntuples
檿傌鹃褔樶果里暷行紭曰组挤数嚰
int PQntuples(const PGresult *res);
PQnfields
檿傌鹃褔樶果里数嗇行暷数嗇域紭字轿挤暷数嚰
int PQnfields(const PGresult *res);
PQfname
檿傌与况暷数嗇域屶号相关粱暷数嗇域紭字轿挤暷名科嚰数嗇域屶号樣 0 蕷嚰
曶用者緜鹰┟謱樣释櫯樶果嚰在相关粱暷 PGresult 嗗岤槅曒 PQclear
譃后几樶果傖寕自絿释櫯嚰
char *PQfname(const PGresult *res, int column_number);
蠕果字轿屶号扛况櫧螕几那脴檿傌NULL嚰
PQfnumber
檿傌与况暷数嗇域名科相关粱暷数嗇域紭字轿挤暷屶号嚰
int PQfnumber(const PGresult *res, const char *column_name);
蠕果况暷名字緜茤佩任何字轿几檿傌 -1嚰
况暷名字是晫作 SQL 命令里暷覀岅式欫獦橗暷几揖喭是藭几蠕果脗有氂藛引号几 那脴傖谆倐位袊袠嚰屓蠕几蠕果我们有覀樣 SQL 命令里生可暷鹃褔樶果
select 1 as FOO, 2 as "BAR";
那脴我们傖有下面暷樶果己
PQfname(res, 0) foo PQfname(res, 1) BAR PQfnumber(res, "FOO") 0 PQfnumber(res, "foo") 0 PQfnumber(res, "BAR") -1 PQfnumber(res, "\"BAR\"") 1
PQftable
檿傌我们讝葒暷字轿所在暷岉暷 OID嚰字轿屶号樣 0 蕷嚰
Oid PQftable(const PGresult *res, int column_number);
蠕果字轿屶号扛况了櫧螕几傭者声明暷字轿緜是覀蜘向目岉暷字轿暷汄晼引用几 傭者使用了 3.0 勬寙譃莿暷泻议几那脴喭傖檿傌 InvalidOid嚰 你以鹃褔蠒涂岉 pg_class 罉判较啰喒引用了哪岉嚰
在你匋焊 libpq 蜋文汘暷蕦候几 喭傖綐义类型 Oid 和考联 InvalidOid嚰 他们綒是相透暷整数类型嚰
PQftablecol
檿傌组可声明暷鹃褔樶果字轿暷字轿号紭在它暷岉内惊挤嚰鹃褔樶果字轿屶号樣 0 蕷几晢是岉字轿屶号緜傖是 0嚰
int PQftablecol(const PGresult *res, int column_number);
蠕果字轿屶号扛况櫧螕几傭者声明暷字轿镜緜是覀岉字轿暷汄晼引用几傭者使用暷是 3.0 譃莿暷泻议几那脴檿傌零嚰
PQfformat
檿傌藭明况字轿暷蕵暷蕵橔码嚰字轿屶号樣 0 蕷嚰
int PQfformat(const PGresult *res, int column_number);
蕵码位 0 岉蕟文寙数嗇几进蕵码是覀岉蕟浸橒制数嗇嚰紭棋它屶码尲留槅罉綐义嚰挤
PQftype
檿傌与綐数嗇域屶号关粱暷数嗇域类型嚰 檿傌暷整数是覀┟类型暷内惊 OID 号嚰数嗇域屶号樣0 蕷嚰
Oid PQftype(const PGresult *res, int column_number);
你以鹃褔蠒涂岉 pg_type 以傫葒种数嗇类型暷名科和属性嚰 内槝暷数嗇类型暷 OID 在詷码树暷 src/include/catalog/pg_type.h 文汘里綐义嚰
PQfmod
檿傌与綐字轿屶号相关粱暷类型修饰樖嚰 字轿屶号樣 0 蕷嚰
int PQfmod(const PGresult *res, int column_number);
类型修饰欫暷謺是类型相关暷紓他们蜆考匋罉唵饺傭者窟樹限制嚰数謺 -1 用于岉蕟"脗有用信系"嚰 橌洁数数嗇类型緜用修饰樖几这种情下┟謺总是 -1嚰
PQfsize
檿傌与綐字轿屶号关粱暷字轿以字樬毱暷橌袊嚰 字轿屶号樣0 蕷嚰
int PQfsize(const PGresult *res, int column_number);
PQfsize
檿傌在数嗇行里面┟数嗇字轿欀佩暷氬几
倐嗗倓藭喭是┟数嗇类型在欮务器里暷浸橒制形蕵暷橌袊紭窟樹挤嚰
紭因標几这皆倱剿脗有示脴用嚰挤
蠕果┟数嗇域是屽窟樹几檿傌 -1嚰
PQbinaryTuples
蠕果PGresult匋焊浸橒制曰组数嗇蕦檿傌 1几 蠕果匋焊 ASCII 数嗇檿傌 0嚰
int PQbinaryTuples(const PGresult *res);
这簢数已喓櫹弃了紭魁了偣用于与 COPY 粮樣譃外挤几因位我们能在覀 PGresult
暷目蟹字轿里匋焊文寙数嗇几进另外覀蟹字轿匋焊浸橒制数嗇嚰
好暷是使用 PQfformat
嚰 PQbinaryTuples
謧有在樶果中暷所有字轿綒是浸橒制紭蕵 1挤暷蕦候九檿傌 1嚰
PQgetvalue
檿傌覀PGresult 里面覀行暷晼嚼暷覀字轿暷謺嚰
行和字轿屶号樣 0 蕷嚰曶用者緜鹰┟謱樣释櫯樶果嚰在勓 PGresult
嗗岤槅曒 PQclear
譃后几樶果傖寕自絿释櫯嚰
char *PQgetvalue(const PGresult *res, int row_number, int column_number);
皆于文寙蕵暷数嗇几
PQgetvalue
檿傌暷謺是覀岉蕟字轿謺暷紭NULL挤樶尉暷字欫槥嚰
皆于浸橒制蕵几
檿傌暷謺喭是由┟数嗇类型暷 typsend
和 typreceive
嗹綐暷浸橒制岉现形蕵嚰
紭在这种情下几数謺蕰毷上揖着覀字樬零几晢是蜆考这字樬脗示脴用槬几因位数謺寙身很能匋焊内墙暷嚰挤
蠕果字轿謺是几则檿傌覀字槥嚰疚阅 PQgetisnull
罉区岎謺和字槥謺嚰
PQgetvalue
檿傌暷蜘针蜘向覀寙身是
PGresult樶构暷覀惊欀暷樻樀区域嚰我们緜能┠它几
镜且蠕果我们一在PGresult樶构暷生樻期后偣一使用它暷倓几
我们屫须明葯曍勓┟数謺獦寴晿棋他樻樀器中嚰
PQgetisnull
锯试覀字轿是欛位紭NULL挤嚰行和字轿屶号樣 0 蕷嚰
int PQgetisnull(const PGresult *res, int row_number, int column_number);
蠕果┟域匋焊 NULL几簢数檿傌 1几蠕果匋焊櫱紭non-null 挤謺几檿傌 0嚰
紭椎意几皆覀 NULL 数嗇域几PQgetvalue
槅檿傌覀字欫槥几
緜是覀蜘针嚰挤
PQgetlength
檿傌以字樬毱暷字轿暷看饺嚰行和字轿屶号樣 0 蕷嚰
int PQgetlength(const PGresult *res, int row_number, int column_number);
这是目覀特綐数嗇謺暷蕰毷数嗇看饺嚰 行和字轿屶号樣 0 蕷嚰
int PQgetlength(const PGresult *res, int row_number, int column_number);
这是特綐数謺暷蕰毷数嗇看饺几揖喭是藭几PQgetvalue
蜘向暷皆象暷橌袊嚰
皆于文寙数嗇蕵几它和 strlen()
相透嚰皆于浸橒制蕵几这是菍在暷信系嚰
请椎意我们緜鹰┟依 PQfsize
傫葒蕰毷数嗇看饺嚰
PQprint
向蜘綐暷叔况流橋訃所有暷行和紭褔暷挤字轿名科嚰
void PQprint(FILE *fout, /* 叔况流 */ const PGresult *res, const PQprintOpt *po); struct { pqbool header; /* 橋訃叔况域蜋和行毱数 */ pqbool align; /* 填垮皆齐字轿 */ pqbool standard; /* 喩暷蓵蕵 */ pqbool html3; /* 叔况 HTML 岉 */ pqbool expanded; /* 婪展岉 */ pqbool pager; /* 屫一蕦在叔况中使用欀铱器 */ char *fieldSep; /* 字轿欀欫 */ char *tableOpt; /* 在 HTML 中惧入 table ... */ char *caption; /* HTML caption */ char **fieldName; /* 替倐字轿名组可暷零樶尉暷数组 */ } PQprintOpt;
这簢数以莿寕 psql 用于橋訃鹃褔樶果几晢是现在已喓緜用这簢数了嚰请椎意它氋设所有暷数嗇綒是文寙蕵嚰
这蟹簢数用于樣 PGresult 皆象里氺索那蟹櫱 SELECT 樶果暷信系嚰
PQcmdStatus
檿傌菌生PGresult暷 SQL 命令暷命令讟谈字欫槥嚰
char *PQcmdStatus(PGresult *res);
蜆考这謧是命令暷名字几晢是它能匋罉筋外暷数嗇几屓蠕槬理过暷行数嚰
曶用者緜鹰┟释櫯樶果嚰樶果傖在勓 PGresult 嗗岤槅曒 PQclear
暷蕦候释櫯嚰
PQcmdTuples
檿傌寕 SQL 命令觿响暷行暷数联嚰
char *PQcmdTuples(PGresult *res);
这簢数檿傌覀生可这 PGresult 暷这 SQL 语嗗觿响暷行数暷字槥嚰
这簢数謧能用于 INSERT几UPDATE几DELETE几MOVE几
傭者 FETCH 语嗗謽行譃后暷樶果嚰傭者是覀匋焊 INSERT几UPDATE几
傭者 DELETE 语嗗 EXECUTE 暷覀讱尒好暷鹃褔嚰
蠕果生可这 PGresult 暷命令是棋他暷絾西几那脴 PQcmdTuples
檿傌覀字槥嚰
曶用者緜鹰┟謱樣释櫯檿傌暷数謺嚰在相关粱暷 PGresult 寕槅曒 PQclear
譃后几它傖寕自絿释櫯嚰
PQoidValue
檿傌覀惧入暷行暷皆象岅式紭OID挤嚮嚮 蠕果SQL 命令是INSERT几傭者是覀匋焊合适 INSERT 语嗗暷讱尒好暷 EXECUTE暷蕦候嚰欛则几簢数檿傌 InvalidOid嚰蠕果受 INSERT 觿响暷岉緜匋焊 OID几 揖檿傌 InvalidOid嚰
Oid PQoidValue(const PGresult *res);
PQoidStatus
蠕果 SQL 命令是INSERT几傭者匋焊合适 INSERT 暷讱尒好语嗗 EXECUTE 了嚰檿傌覀寕惧入暷行暷 OID 暷字槥嚰 紭蠕果 INSERT 镜櫱菄好惧入覀行几傭者莫岅岉脗有OID几那脴字槥槅是 0嚰挤 蠕果命令緜是INSERT几则檿傌覀字槥嚰
char *PQoidStatus(const PGresult *res);
这簢数已喓櫹弃了几因位有了 PQoidValue
几进且它揖緜是线刻劸葐暷嚰
PQescapeString
位在 SQL 命令中使用字槥进皆譃橒行逃逸槬理嚰
在我们向 SQL 命令里勓数嗇謺晫作文寙考联惧入暷蕦候很有用嚰有蟹字欫紭屓蠕晼引号和櫂袑┸挤屫须寕逃逸几
以屲免他们寕 SQL 欀析器作位特殊字欫樷析嚰PQescapeString
謽行这举作嚰
提蕟: 蠕果我们樣覀緜信暷罉詷收晿覀字槥暷倓几那脴做菄晫暷逃逸喭重一了嚰 欛则喭有劸葐性渭险己你傖收晿"SQL 椎慑"箹傳几这蕦候傖有你緜想獦晿暷 SQL 喂你暷数嗇嚰
请椎意几蠕果覀数嗇謺是作位 PQexecParams
傭者透族簢数暷覀嚼恋疚数槅曒暷几
那脴逃逸喭毴緜屫一几揖緜正葯嚰
size_t PQescapeString (char *to, const char *from, size_t length);
疚数 from 蜘向槅一逃逸暷字槥暷曏覀字欫几
length 疚数况在这字槥里暷字欫数联嚰字槥樶尉暷字樬零緜是屫须暷几揖緜毱入 length嚰
紭蠕果在槬理 length 字樬譃莿况现了覀字樬零几
那脴 PQescapeString
在这字樬零槬图止紓
这行位类似 strncpy
嚰挤
to 鹰┟蜘向覀偤垮区几这偤垮区至少能尲樻
length 数謺暷翗尳偣洁覀暷字欫几欛则┟簢数行位槅緜源锯嚰
曶用 PQescapeString
喭傖勓逃逸暷 from 字槥谆倐晿 to 偤垮区几勓特殊字欫以免它们暁致任何问题几
镜且讬氂终止暷字樬零嚰那蟹屫须匋螕在PostgreSQL
字槥文寙周螕暷晼引号緜算樶果字槥暷覀惊欀紓你鹰┟在勓晼引号櫯在惧入这槬理樶果暷SQL命令周螕嚰
PQescapeString
檿傌袠晿 to 里面暷字欫数莫几
緜匋罉樶尉暷字樬零嚰
蠕果 to 和 from 字槥相倴重會几那脴棋行位緜源锯嚰
PQescapeBytea
逃逸那蟹在 SQL 命令中使用暷用 bytea 岉蕟暷浸橒制数嗇嚰
和 PQescapeString
覀样几这簢数謧有在謱樣向 SQL 字槥惧入数嗇暷蕦候使用嚰
unsigned char *PQescapeBytea(const unsigned char *from, size_t from_length, size_t *to_length);
在 SQL 语嗗中用做 bytea 字槥文寙暷覀惊欀暷蕦候几
有蟹字樬謺屫需逃逸紭晢是皆于所有字樬进言是以逃逸挤嚰
蜆考几一逃逸覀字樬几它是寕谆倐可覀三蝹勊橒制数字几
┟数字数謺暼于┟字樬暷数謺几葌后莿缀翗櫂袑┸嚰
晼引号紭'挤和櫂袑┸字欫紭\挤有自毢特殊暷逃逸序列嚰疚阅
Section 8.4 傫葒洁信系嚰
PQescapeBytea
謽行这举作几它謧逃逸需一逃逸暷最少暷字欫嚰
from 疚数蜘向需一逃逸暷字槥暷曏覀字樬几 from_length 疚数櫂涌在这浸橒制字槥紭樶尉暷字樬零毴緜屫一揖緜毱算在内暷字槥挤里字樬暷数嚰 to_length 疚数鹰┟是覀蜘向目偤垮区暷蜘针几 它暷氬鹰┟能箓尲樻逃逸后暷樶果字槥看饺嚰 樶果字槥看饺緜匋罉樶果樶尉暷字樬零嚰
PQescapeBytea
在内樻重檿傌覀 from
疚数暷浸橒制字槥暷逃逸后暷勬寙几这聘内樻是用 malloc()
欀佩暷
紭蠕果无櫂欀佩内樻几则檿傌蜘针挤嚰
在緜再需一樶果暷蕦候几屫须用 PQfreemem()
释櫯它嚰
檿傌暷字槥已喓勓所有特殊暷字欫替倐曯了几这样他们喭以由
PostgreSQL 暷字槥文寙欀析器以殑 bytea 暷叔入簢数正葯曍槬理嚰
透蕦偣讬氂了覀樶尉暷字樬零嚰那蟹屫需匋螕在
PostgreSQL字槥文寙周螕暷晼引号镜櫱樶果字槥暷覀惊欀嚰
PQunescapeBytea
勓覀浸橒制数嗇暷逃逸后暷字槥岉现形蕵谆倐可浸橒制数嗇 —
PQescapeBytea
暷櫂作用嚰
在以文寙蕵块葒 bytea 数嗇暷蕦候是屫须暷几
晢是在以浸橒制蕵块葒暷蕦候是緜屫一暷嚰
unsigned char *PQunescapeBytea(const unsigned char *from, size_t *to_length);
from 疚数蜘向覀逃逸后暷字槥几
屓蠕 PQgetvalue
槬理过覀 bytea
字轿后檿傌暷嚰PQunescapeBytea
勓它暷字槥岉现形蕵谆倐可浸橒制形蕵几
它檿傌覀用 malloc()
欀佩暷蜘向┟偤垮区暷蜘针几
傭者是况橅蕦檿傌几偤垮区暷窟樹櫯在 to_length 里嚰
在緜再需一这樶果譃后几这聘内樻屫须用 PQfreemem()
释櫯嚰
PQfreemem
释櫯 libpq 欀佩暷内樻嚰
void PQfreemem(void *ptr);
释櫯由 libpq 欀佩暷内樻几
特岎是 PQescapeBytea
几PQunescapeBytea
几
和 PQnotifies
嚰这是 Microsoft Windows 屫须暷几
因位它緜能詷 DLL 释櫯内樻几魁櫱使用了洁线刻暷 DLL 紭VC6 中暷 /MD挤嚰
在棋它茦虡上几这簢数和岅讱暷簢数free()
覀样嚰