2017-10-28 6 views
-3

私はPHPの専門家でなく、OOPを試してみることにしました。私はSQLインジェクションを防ぐためにMySQLのエスケープ関数を作成しようとしましたが、 "致命的なエラー:$ thisを再割り当てできません"というエラーは吐き出されます。

public function escape($result) { 
     global $this->con; 
     return mysqli_real_escape_string($this->con, $result); 
} 

「グローバル」を削除するとエラーは表示されなくなりますが、そのようなものは必要ありません。

ありがとうございました。

+0

グローバル名空間に変数を割り当てます。私。あなたのオブジェクトの外側に、誰もが使用できるようにします。 $ thisはオブジェクトの現在のインスタンスを参照します。 $ thisをグローバルにすることはできません。そうすれば誰もがconを変更することができます。オブジェクトのインスタンスを作成し、コード内のそのインスタンスのconの値を変更します。 – Nic3500

+2

それは意味をなさない...もしあなたがそのスコープ内の '$ this-> con'にアクセスできるなら、' mysqli_real_escape_string'(それでもプリペアドステートメントを使用していません...?)をパラメータとして渡すことができますそこには世界全体である必要はありません。 – CBroe

+0

これを参照してください:https://stackoverflow.com/questions/1523479/what-does-the-variable-this-mean-in-php – Nic3500

答えて

1

なぜglobal$thisを一緒に使用していますか?

globalは、スコープの外から指定された名前の変数を割り当てています。例えば

$variable = 'test'; 
final class Test 
{ 
    public function __toString() 
    { 
     global $variable; 
     return $variable; 
    } 
} 
echo new Test(); 

それはスコープの外に割り当てられているが、私は$変数を使用する方法を参照してください?

したがってglobal $thisを実行すると、$thisに割り当てようとしますが、これはできません。

OOPコードを実行しようとしている場合は、間違いなくmysqliではなくPDOを使用する必要があります。また、コメントに記載されているように、準備されたステートメントを使用してください。

関連する問題