Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP OOP无法查询mysqli_Php_Oop_Mysqli - Fatal编程技术网

PHP OOP无法查询mysqli

PHP OOP无法查询mysqli,php,oop,mysqli,Php,Oop,Mysqli,我已经挣扎了好几天,想知道如何在下面的过程中遵循OOP 下面是我的connection类,它处理与数据库的连接 <?php class Connection{ public $con = null; public function __construct(){ return $this->con = new mysqli("127.0.0.1:3306", "root", "root", "tester"); } } ?> 这是我

我已经挣扎了好几天,想知道如何在下面的过程中遵循OOP

下面是我的connection类,它处理与数据库的连接

<?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()


我做错了什么?

如下更改您的课程。由于要传递连接对象,因此需要将其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);
    }
}

除了已经给出的答案,值中的字符串还需要用引号括起来

即:
值(“$name”);“;
值(“$name”);”这是另一种方法

旁注:
value
values
在MySQL中都被认为是有效的语法

根据手册:

  • 有关字符串文字的更多信息,请访问

  • 检查查询中的错误也会发出语法错误的信号。



旁注:您当前的代码是开放的。使用,或者,它们更安全。

既然要包装两次,那么就必须使用
$this->con->con->query()
。避免额外的包装。调查PDO而不是mysqli。这最终将减少工作量(特别是对于更简单的参数绑定)。您正在进行双换行,因此它将是
con->con
。你应该重新考虑你的结构。Imo@mario好的,现在错误消失了,但没有添加到我的数据库中。请检查错误。值中的语法错误很明显;这是一根绳子。检查错误是编码/调试的一部分,而不是打印mysqli_错误以了解数据库返回的内容。在插入
value($name)
Look
$Helpers->register(“Keannu”)期间,这仍然会导致语法错误不应该是字符串吗?我应该使用什么数据类型?@Fred ii-也许你应该提供善意的帮助作为答案,OP应该接受:)@Fred ii-是的,Fred我现在要重新编码我知道这个概念了。双重包装和字符串文字。非常感谢你们,把我从几天的挣扎中救了出来。
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name,...)] 
    [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...