2017-06-13 24 views
0

存在私はここで解決策を行いました:Warning: pg_query(): Query failed: ERROR: syntax error at or nearが、私はまだ、次のエラーを得た:pg_query():クエリに失敗しました:エラー:列doesnotが

Warning: pg_query(): Query failed: ERROR: column "rosmoffi" does not exist LINE 1: ... FROM public."espece" where "espece"."Code_Espece" =Rosmoffi ^

が、これは私のコードです:

$conn = pg_connect($conn_string); 

$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ; 
if (!$result = pg_query($conn, $query)){ 
    echo pg_result_error ($conn); 
    return false; 
} 
$result = db($result); 
return $result; 
+1

$ iddの値は引用符で囲まれていないので、列名と見なされます。パラメータを使用し、文字列を連結しないでください。 –

+0

@NishantSolanki私はそれを試してみましたが、私は同じエラーがあります。 –

+0

@SamKuhmonen何を意味するのか分かりませんか? –

答えて

1
$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" ='.$idd ; 

これを行わないでください。ここに何を出力すれば、エラーメッセージが表示されるはずですが、エラーが表示されます。変数$iddにあるものはそのままクエリに入り、ではなく、は文字列とみなされます。それは単にクエリの一部です。したがって、引用符がないので、この場合は列名として解釈されます。

$iddがユーザーから届いた場合、誰かがそれを1; truncate table especeに設定したときに何が起こるかを考えると、最悪の部分です。または何か悪い。 すぐにparametersの使い方を学んでください。あなたのコードは次のようになり

使用パラメータ:

$query = 'SELECT * FROM public."espece" where "espece"."Code_Espece" =$1'; 
if (!$result = pg_query_params($conn, $query, array($idd))){ 

変数が正しくデータベースに与えられ、何のインジェクションの脆弱性が存在していないこの方法です。

NB!二重引用符を言っている人のために、削除する必要があります。彼らはしないでください。カラム名がCode_Especeと大文字である場合、PostgreSQLは引用符なしではそれを認識しません。大文字の使用は通常推奨されません。

+0

私はあなたが提案したことを学んだが、私はこのエラーを解決する方法を知らなかった –

+0

@MohamedRedaAguezzoul SQL文字列に$ iddを連結せず、もしあなたがそれをして、別のエラーが出たら、その質問を詳細に更新してください。 –

+0

@MohamedRedaAguezzoulコード例を追加しました。 –

関連する問題