2016-09-22 46 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函数有关,因为当我删除所有工作正常。

任何意见是非常欢迎。

在此先感谢! Alex。

+0

*:* - 你需要找出真正的错误是“目前,我只是得到的输出数据库查询失败。” –

+0

@ Fred-ii-错误似乎与我的mysql_prep函数有关,因为当这被删除的东西似乎工作正常。 – FruitWinder

+0

你应该清理变量不是一个完整的查询 – RiggsFolly

回答

2

您正在运行您的整个查询通过转义函数,这正是错误事情要做。这消除了查询在语法上正确所需的任何引号。

考虑一下:

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

既然你逃避了整个事情,你可以发送此到数据库:

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

因为这些报价都逃跑,他们不报价了。它们是纯文本字符,并且数据库正在寻找名为'bar'的字段以从中获取值。您无法在记录中查找字段以进行插入,因为您正在插入记录并且尚不存在。并且'bar'不太可能存在于您的表格定义中。

因此,您的查询失败,语法错误,并且由于您有一个固定/不变/无用的“失败”的消息,你永远不会被告知为什么失败的原因。

你死()至少更改为类似

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

哎呦,急切的时刻。非常感谢,使得更多的意义和适当的注意:-) – FruitWinder