Php 为什么不是';不准备执行语句?

Php 为什么不是';不准备执行语句?,php,mysql,Php,Mysql,我正在尝试bind语句向表中插入数据。我只知道连接已经建立,但prepare语句不起作用。我做错什么了吗 <?php class connDb{ private $link; private $host; private $user; private $pass; private $dbname; public function __construct($host, $user, $pass, $dbname){ $this->host=$host;

我正在尝试bind语句向表中插入数据。我只知道连接已经建立,但prepare语句不起作用。我做错什么了吗

<?php
class connDb{
    private $link;
private $host;
private $user;
private $pass;
private $dbname;
    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link=mysqli_connect($this->host, $this->user, $this->pass, $this->dbname)
            OR
        die("Not connected to MySQL");
    }
}
?>
<?php
$conn1=new connDb("localhost", "root", "", "dbind");
$xyz=$conn1->prepare("INSERT INTO table1 VALUES(?, ?, ?)");
$x="vikas";
$y="vikas@gmail.com";
$z="123n";
$xyz->bind_param('sss', $x, $y, $z);

$xyz->execute();
?>

您错过了返回
$this->link

请在
connDb
类中添加新函数

public function getDB() {
   return $this->link;
}
因此,最后请遵循以下代码:

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;
    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->dbname) OR die("Not connected to MySQL");
    }

    public function getDB() {
        return $this->link;
    }
}
?>

<?php
$conn1=new connDb("localhost", "root", "mysql", "db_mvc");
$xyz=$conn1->getDB()->prepare("INSERT INTO category (name, email, password) VALUES(?, ?, ?)");
$x="vikas";
$y="vikas@gmail.com";
$z="123n";
$xyz->bind_param('sss', $x, $y, $z);
$xyz->execute();
?>

您错过了返回
$this->link

请在
connDb
类中添加新函数

public function getDB() {
   return $this->link;
}
因此,最后请遵循以下代码:

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;
    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link = mysqli_connect($this->host, $this->user, $this->pass, $this->dbname) OR die("Not connected to MySQL");
    }

    public function getDB() {
        return $this->link;
    }
}
?>

<?php
$conn1=new connDb("localhost", "root", "mysql", "db_mvc");
$xyz=$conn1->getDB()->prepare("INSERT INTO category (name, email, password) VALUES(?, ?, ?)");
$x="vikas";
$y="vikas@gmail.com";
$z="123n";
$xyz->bind_param('sss', $x, $y, $z);
$xyz->execute();
?>

您需要使用MySQLi连接,而不是您自己的对象

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;
    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link=mysqli_connect($this->host, $this->user, $this->pass, $this->dbname)
            OR
        die("Not connected to MySQL");
    }
    public function getLink() {
        return $this->link;
    }
}

$conn1=new connDb("localhost", "root", "", "dbind");
$xyz=$conn1->getLink()->prepare("INSERT INTO table1 VALUES(?, ?, ?)");
$x="vikas";
$y="vikas@gmail.com";
$z="123n";
$xyz->bind_param('sss', $x, $y, $z);

$xyz->execute();
?>

您需要使用MySQLi连接,而不是您自己的对象

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;
    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link=mysqli_connect($this->host, $this->user, $this->pass, $this->dbname)
            OR
        die("Not connected to MySQL");
    }
    public function getLink() {
        return $this->link;
    }
}

$conn1=new connDb("localhost", "root", "", "dbind");
$xyz=$conn1->getLink()->prepare("INSERT INTO table1 VALUES(?, ?, ?)");
$x="vikas";
$y="vikas@gmail.com";
$z="123n";
$xyz->bind_param('sss', $x, $y, $z);

$xyz->execute();
?>

您的逻辑错误:您的
connDb
类不是mysqli对象,它只包含一个私有属性,该属性是mysqli对象

你需要一个getter来使用它

例如:

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;

    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link=mysqli_connect($this->host, $this->user, $this->pass, $this->dbname)
            OR
        die("Not connected to MySQL");
    }

    public function getLink() {
         return $this->link;
    }
}

$conn1=new connDb("localhost", "root", "", "dbind");
$xyz=$conn1->getLink()->prepare("INSERT INTO table1 VALUES(?, ?, ?)");
...

您的逻辑错误:您的
connDb
类不是mysqli对象,它只包含一个私有属性,该属性是mysqli对象

你需要一个getter来使用它

例如:

<?php
class connDb{
    private $link;
    private $host;
    private $user;
    private $pass;
    private $dbname;

    public function __construct($host, $user, $pass, $dbname){
        $this->host=$host;
        $this->user=$user;
        $this->pass=$pass;
        $this->dbname=$dbname;
        $this->link=mysqli_connect($this->host, $this->user, $this->pass, $this->dbname)
            OR
        die("Not connected to MySQL");
    }

    public function getLink() {
         return $this->link;
    }
}

$conn1=new connDb("localhost", "root", "", "dbind");
$xyz=$conn1->getLink()->prepare("INSERT INTO table1 VALUES(?, ?, ?)");
...


抄袭另一个答案会让你的答案变得毫无用处。别再(小打小闹)了。如果这是最重要的,那就玩Farmville吧。“如果你问我的话,那就太幼稚了。”法比奥维德莫,你知道的,你真的投了我一票。。。。我没有投反对票,也没有任何人投反对票。只要有人在场,有些人就会疯狂地进行dv,并错误地假设,记住这一点。@FabioWidmer没问题。。。我只是说。有时候,当一个答案被否决时,有些人会认为是我,然后开始疯狂的玩心理dv,哈哈,我以前也见过这种情况。我们都在一起。如果我们可以为某人提供解决方案,因为其他人没有或遗漏了某些内容,那么应该提到他们犯了错误,应该予以纠正/澄清。TBH,只有当我觉得答案很糟糕并且没有回答问题时,我才会投反对票,这种情况很少发生。@Fred ii-好的。令人遗憾的是,一个拥有69k评级的人需要否决我的答案,因为其他人也可以用同样的答案回答问题。。。不是说你!抄袭另一个答案会让你的答案变得毫无用处。别再(小打小闹)了。如果这是最重要的,那就玩Farmville吧。“如果你问我的话,那就太幼稚了。”法比奥维德莫,你知道的,你真的投了我一票。。。。我没有投反对票,也没有任何人投反对票。只要有人在场,有些人就会疯狂地进行dv,并错误地假设,记住这一点。@FabioWidmer没问题。。。我只是说。有时候,当一个答案被否决时,有些人会认为是我,然后开始疯狂的玩心理dv,哈哈,我以前也见过这种情况。我们都在一起。如果我们可以为某人提供解决方案,因为其他人没有或遗漏了某些内容,那么应该提到他们犯了错误,应该予以纠正/澄清。TBH,只有当我觉得答案很糟糕并且没有回答问题时,我才会投反对票,这种情况很少发生。@Fred ii-好的。令人遗憾的是,一个拥有69k评级的人需要否决我的答案,因为其他人也可以用同样的答案回答问题。。。不是说你!我明白了,你现在就这么做了。哦,你得到的dv不是我的。是的,它现在起作用了,但我看到没有指定列的quries也起作用。@VikasKumar请提及你的表列名,我会编辑我的答案。为什么OP“尝试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了SO的未来访客。所以你从现在开始,我明白了。哦,还有你得到的dv,不是我的。是的,它现在可以工作了,但我见过没有指定列的quries也可以工作。@VikasKumar请提及您的表列名,我将编辑我的答案。为什么OP“尝试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客;对任何人来说都不是很好。但我确实有我的疑问。谢谢,但我必须指定列名才能让它工作。是否需要在查询中添加列名?@VikasKumar,前提是表中的列数比您现在在准备好的语句中添加的3列多。共有4列。一个是自动递增的,不为空。你说什么?在这种情况下,你需要输入列,例如0或指定3列。似乎有一场dv战争正在进行;对任何人来说都不是很好。但我确实有我的疑问。谢谢,但我必须指定列名才能让它工作。是否需要在查询中添加列名?@VikasKumar,前提是表中的列数比您现在在准备好的语句中添加的3列多。共有4列。一个是自动递增的,不为空。你说什么?在这种情况下,你需要输入列,例如0或指定3列。除了目前给出的答案外,检查查询错误和错误报告是另一个有用的调试工具@Vikas Kumar。如何运行此代码
$xyz=$conn1->getLink()->prepare(“插入到表1值(?,?)”
@Vikas Kumar您接受的答案我得到了错误
致命错误:在F:\Ampps\www\test\index.php第27行的非对象上调用成员函数bind_param(),
@razibalmamun,最好将注释张贴在答案本身上,以便该人可以更正。除了目前给出的答案,检查查询错误和错误报告是另一个有用的调试工具@Vikas Kumar。如何运行此代码
$xyz=$conn1->getLink()->prepare(“插入到表1值(?,?)”
@Vikas Kumar您接受的答案我得到了错误
致命错误:在F:\Ampps\www\test\index.php第27行的非对象上调用成员函数bind_param()
@razibalmamun该评论最好发布在answe上