2015-09-04 60 views
0

我有一個SQL請求,並在螢火蟲我有一個錯誤。SQL請求與addslashes,但在螢火蟲錯誤

這是我的SQL請求:

$sql = "UPDATE public.".$tableBDD." SET ".$champsDB." WHERE ".$idTable."='".$idUpdate."'"; 

而在這之前,我有這樣的:

$champsDB.= $champs->nom.'=\''.addslashes($ligne[$i]).'\','; 

因此,它應該工作,因爲我在我的字符串添加斜線。但我的錯誤是:

Warning: pg_query(): Query failed: ERROR: syntaxe error on « hiver » LINE 1: ...M_ASK',annee_ref_c_amg='1958',nom_culture='Blé d\'hiver',dat...

而且它顯示了錯誤「d'\ HIVER」所以我donc明白爲什麼,因爲我不應該有引號的錯誤了。

有人可以幫我嗎?

+0

使用'pg_escape_string'。 – Barmar

回答

0

在PostgreSQL,你必須使用pg_escape_string:

pg_escape_string()逃脫查詢數據庫的字符串。它以PostgreSQL格式返回一個不帶引號的轉義字符串。 pg_escape_literal()是爲PostgreSQL轉義SQL參數的首選方式。 addslashes()不能用於PostgreSQL。如果列的類型是bytea,則必須使用pg_escape_bytea()。 pg_escape_identifier()必須使用轉義標識符(如表名,字段名)

參見:http://php.net/manual/en/function.pg-escape-string.php

+0

謝謝。所以我應該有這樣的:$ sql =「UPDATE public。」。$ tableBDD。「SET」.pg_escape_string($ champsDB)。「WHERE」。$ idTable。「='」。$ idUpdate。「'」;但之後,我的字符串是:''id_traitement =''ASK_FYM_ASK'',annee_recolte =''1957'',id_itk_pro =''ITKpro_ASK_FYM_ASK_1957'',id_essai =''問''...'用雙引號:/ – Erlaunis

+0

那麼你必須在值上使用函數,而不是字段名,所以這個必須在串起這個之前完成 – Xavjer

+0

所以我嘗試了:'$ champsDB。= $ champs-> nom。'='。pg_escape_string($所以它應該只應用於值而不是字段,但在這種情況下,我沒有引用:/'id_traitement = ASK_FYM_ASK,annee_recolte = 1957,id_itk_pro = ITKpro_ASK_FYM_ASK_1957,id_essai = ASK,code_traitement = FYM_ASK' – Erlaunis