我已经挣扎了好几天,想知道如何在接下来的过程中遵循OOP。
这是我的连接类,它处理到数据库的连接。
<?php
class Connection{
public $con = null;
public function __construct(){
return $this->con = new mysqli("127.0.0.1:3306", "root", "root", "tester");
}
}
?>
这是我的助手类,这个类包含所有的常用方法,将在我的webapp中使用,如插入数据,删除和更新。
<?php
class Helpers{
public $con = null;
public function __construct($connection){
$this->con = $connection;
}
public function register($name){
$con = $this->con;
$sql = "insert into name(Name)value($name);";
$con->query($sql);
}
}
?>
我在register。php
中这样调用它们<?php
require "Connection.php";
require "Helpers.php";
$connection = new Connection();
$Helpers = new Helpers($connection);
$Helpers->register("Keannu");
?>
但是我得到以下错误:
调用未定义方法Connection::query()。
我做错了什么?
除了已经给出的答案外,value中的字符串需要用引号括起来。
。: value ('$name');";
或value ('".$name."');";
是另一种方法。
旁注:value
和values
被接受,并且在MySQL中都被认为是有效的语法。
按照手册:http://dev.mysql.com/doc/refman/5.6/en/insert.html
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[PARTITION (partition_name,...)]
[(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
有关字符串字面值的更多信息,请访问
https://dev.mysql.com/doc/refman/5.0/en/string-literals.html检查查询中的错误也会提示语法错误。
http://php.net/manual/en/mysqli.error.php
旁注:你现在的代码是开放的SQL注入。
mysqli
和预处理语句一起使用,或者PDO和预处理语句一起使用,它们更安全。
按如下方式更改您的类。因为你正在传递一个连接对象,你需要将它的con属性设置为$this->con
。
<?php
class Helpers{
public $con = null;
public function __construct($connection){
$this->con = $connection->con;
}
public function register($name){
$con = $this->con;
$sql = "insert into name (Name) values ($name);";
$con->query($sql);
}
}