2016-09-22 7 views
1

私は現在PHPを学んでおり、OOPを初めて使い慣れました。私はMySQLのクエリと接続を処理するオブジェクトを作成しようとしています。PHP OOP学習曲線 - MySQLオブジェクトの失敗

これは私がこれまでに作成したものです:

class MySQLDatabase { 

    private $connection; 

    function __construct() { 
     $this->open_connection(); 
    } 

    public function open_connection() { 
     $this->connection = mysqli_connect(DB_SERVER, DB_USER, DB_PASS, DB_NAME); 
     if(mysqli_connect_errno()) { 
      die(
       "Database connection failed: " . mysqli_connect_error() . 
       " (" . mysqli_connect_errno() . ")" 
      ); 
     } 
    } 

    public function close_connection() { 
     if(isset($this->connection)) { 
      mysqli_close($this->connection); 
      unset($this->connection); 
     } 
    } 

    public function query($sql) { 
     $cleaned_sql = mysqli::real_escape_string($sql); 
     $result = mysqli_query($this->connection, $cleaned_sql); 
     $this->confirm_query($result); 
     return $result; 
    } 

    public function mysql_prep($string) {   
     $escaped_string = mysqli_real_escape_string($this->connection, $string); 
     return $escaped_string; 
    } 

    private function confirm_query($result) { 
     if (!$result) { 
     die("Database query failed."); 
     } 
    } 
} 

と公開面する側(物事が期待通りに動作することを確認するためのテストをやって)上:現在

$sql = "INSERT INTO users (id, username, password, first_name, last_name) "; 
$sql .= "VALUES (1, 'jbloggs', 'secretpwd', 'Joe', 'Bloggs')"; 
$result = $database->query($sql); 

、私はただの出力を得る: データベースクエリが失敗しました。

私のmysql_prep関数で問題が起きているようですが、すべて削除してもうまくいきます。

アドバイスは大歓迎です。

ありがとうございます!アレックス 。

+0

のようなものに)(あなたの金型を変更します。 –

+0

@ Fred-ii-エラーが私のmysql_prep関数に関連しているように見えます。 – FruitWinder

+0

完全なクエリではなく変数をクリーンアップすることになっています – RiggsFolly

答えて

2

ENTIREクエリは、エスケープ機能(のWRONG)で実行しています。これにより、クエリが構文的に正しいものであるために必要な見積もりがすべて削除されます。

INSERT INTO foo (bar) VALUES ('baz') 

あなたは全体の事をエスケープしているので、あなたがデータベースにこれを送っている:

INSERT INTO foo (bar) VALUES (\'bar\') 

それらの引用符をエスケープしていることから、彼らは引用符じゃない

はこの考えてみましょうもうそれらは平文文字であり、DBは値を得るために'bar'という名前のフィールドを探しています。挿入するレコードのフィールドを参照することはできません。レコードを挿入していて、まだ存在しないからです。テーブル定義に'bar'が存在する可能性は低いです。

あなたのクエリは構文エラーで失敗し、固定/不変/無駄な "失敗"メッセージがあるので、なぜ失敗したのかはわかりません。あなたは本当のエラーが何であったかを知る必要がある - *:

少なくとも「クエリが失敗したデータベース。現在、私はただの出力を得る」*

die("Query failed: " . mysqli_error($this->connection)); 
+0

うん、あの瞬間。おかげさまで、もっと感謝しています。 – FruitWinder

関連する問題