PHP OOP无法查询mysqli



我已经挣扎了好几天,想知道如何在接下来的过程中遵循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."');";是另一种方法。

旁注:valuevalues被接受,并且在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);
    }
}

最新更新