繁体   English   中英

PHP OOP无法查询mysqli

[英]PHP OOP Cannot Query mysqli

我一直在苦苦思索如何在以下程序中遵循OOP。

这是我的连接类,它处理我与数据库的连接。

<?php
class Connection{
    public $con = null;
    public function __construct(){
        return $this->con = new mysqli("127.0.0.1:3306", "root", "root", "tester");
    }

}
?>

这是我的Helpers类,这个类包含将在我的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 ('$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},...),(...),...

旁注:您现在的代码对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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM