【问题标题】:insert data in database using pdo and oops使用 pdo 和 oops 在数据库中插入数据
【发布时间】:2019-03-01 17:16:18
【问题描述】:

我想,当用户按下提交按钮时,输入的数据会保存在数据库中...
显示没有错误,但仍然没有数据插入到数据库中。

请帮忙

<?php
class database
{
    private $connect;
    function __construct()
    {
        $this->connect=new PDO('mysql:host=localhost;dbname=bfgi','root','');
    }
    function insert($institution,$position,$positionname,$department,$natureofjob,$cametoknow)
    {
        $this->connect->query("INSERT INTO contact_form(institution,position,positionname,department,natureofjob,cametoknow) VALUES('$institution','$position','$positionname','$department','$natureofjob','$cametoknow')");
        return true;
    }
}
$obj=new database();

if(!empty($_POST['sbmt']))
{
    $institution=$_POST['institution'];
    $position=$_POST['position'];
    $positionname=$_POST['positionname'];
    $department=$_POST['department'];
    $natureofjob=$_POST['natureofjob'];
    $cametoknow=$_POST['cametoknow'];

    if($obj->insert($institution,$position,$positionname,$department,$natureofjob,$cametoknow))
    {
        echo "INSERTED";
    }
}
?>

请告诉错误..

【问题讨论】:

  • 你没有对数据库类做任何事情。你已经定义了它,但永远不要使用它。
  • 感谢您的回复。。现在我已经使用了,但仍然显示错误。
  • 它显示什么错误?请edit您的帖子(不在 cmets 中)使用当前代码以及您遇到的确切错误。
  • 请立即查看..
  • 1) MySQL 返回错误的方式与 PHP 不同。您需要检查 PDO errors 而不是盲目地假设它有效。 2)您对 SQL 注入持开放态度。由于您使用的是 PDO,因此请利用 prepared statementsbindparambindvalue这将解决可能出现的任何令人讨厌的引用问题。

标签: php pdo


【解决方案1】:

这段代码只做声明和变量处理。

在第一部分中,您定义了一个名为数据库的类,具有 2 个方法:

  • 构造函数,一种用于初始化类的特殊方法
  • insert() 方法

第二部分只是将一些 $_POST 变量放在另一个变量中。

要使用此代码插入列,您需要构造一个数据库实例 ($db = new database();) 并在其上调用 insert 方法 ($db-&gt;insert(...)),并使用您拥有的 $_POST 参数。

除此之外,您不应将声明(例如类或函数声明)和带有副作用的代码(将被执行的代码)混为一谈。

您也不应该将来自用户的原始变量放入代码中,因为存在 SQL 注入风险。

您可以阅读PHP The right way,其中列出了 PHP 的标准和良好习惯。

【讨论】:

  • $obj=新数据库(); if($obj->insert($institution,$position,$positionname,$department,$natureofjob,$cametoknow)
  • 注意$obj->insert()会返回null(因为没有return语句),所以你的条件永远是false
  • 那么我应该返回什么......?
  • @karanloona 您应该返回 $this->connect->query() 的结果,如果出现错误,则返回错误:php.net/manual/en/pdo.query.php#refsect1-pdo.query-returnvalues。但是,如果成功,它会返回一个 PDOStatement 对象(在某个条件下将评估为真),如果您只想返回一个布尔值,您可以使用三元条件 (1) 或双重否定 (2)。 1.return $this-&gt;connect-&gt;query(...) ? true : false; 2.return !!$this-&gt;connect-&gt;query(...)
猜你喜欢
  • 2016-05-15
  • 2014-08-28
  • 2014-06-29
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2014-11-21
相关资源
最近更新 更多