首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现全局函数以连接到数据库并在PHP中执行查询

问实现全局函数以连接到数据库并在PHP中执行查询
EN

Stack Overflow用户
提问于 2020-05-01 07:54:18
回答 1查看 311关注 0票数 0

我正处于PHP的学习阶段。有人能帮我写几个函数吗?

  • ConDB($host, $user, $pwd)通过PDO连接到MySQL数据库。
  • RunSQL($sql)执行语句(如CREATE、INSERT、UPDATE、DELETE)。该函数将使用ConDB()函数连接到数据库并执行$sql,然后自动关闭连接。
  • QuerySQL($sql)查询数据库。它应该返回一个记录集数组,我们可以进一步使用这些记录集在页面上作为表显示。

RunSQL()和QuerySQL()函数应该可以在任何.php页面上使用。

如果能做些更好的事情来实现这一点,对我来说将是一个很大的帮助。谢谢。

例如,我希望能够这样写:

代码语言:javascript
复制
$sql = “CREATE TABLE Persons(Person_ID int Auto_Incrememt PrimaryKey, Name varchar(255))”;
RunSQL($sql);

$sql = “SELECT * FROM Persons ORDER BY Person_ID ASC”;
$result = QuerySQL($sql)

然后,使用while循环,我们可以将数据提取到一个表中。我希望你能明白这个想法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-01 10:42:12

奈杰尔·任的评论是正确的,但由于我在几年前遇到了同样的问题,这里是我当时使用的链接。它也有使用示例。滚动您自己的PDO类

下面您将看到我根据这个示例创建的数据库类、在该类中使用的一些常量以及一个简单的用法示例。

代码语言:javascript
复制
define("DB_USER",           "yourUser");
define("DB_PASS",           "yourPassword");
define("DB_HOST",           "localhost");
define("DB_NAME",           "yourDBName");
define("DB_CHARSET",        "utf8mb4");

//create new database handler
$dbh = new Database();

//sample query
$dbh->query('SELECT var FROM table WHERE user_id = :id');
$dbh->bind(':id', $id );
$result = $dbh->resultsetAssoc(); // a two dimensional array is returned
foreach ($result as $values) {
    //do something with $values["var"]
}


class Database
{
  private $host = DB_HOST;
  private $dbname = DB_NAME;
  private $charset = DB_CHARSET;
  private $user = DB_USER;
  private $pass = DB_PASS;    

  private $dbh;
  private $error;

  private $stmt;

  public function __construct() {
     // Set DSN
    $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=' . $this->charset;
    // Set options
    $options = array(
        PDO::ATTR_PERSISTENT    => true,
        PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION
    );
    // Create a new PDO instanace
    try{
        $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
    }
        catch(PDOException $e) {  
            $this->error = $e->getMessage();               
            file_put_contents('PDOErrors.txt', $this->error, FILE_APPEND);
            die ("Database Connection Error");
    }
  }    
  public function query($query) {
    $this->stmt = $this->dbh->prepare($query);        
  }
  public function bind($param, $value, $type = null){
  //determine type as input for bindValue
    if (is_null($type)) {
      switch (true) {
          case is_int($value):
              $type = PDO::PARAM_INT;
              break;
          case is_bool($value):
              $type = PDO::PARAM_BOOL;
              break;
          case is_null($value):
              $type = PDO::PARAM_NULL;
              break;
          default:
              $type = PDO::PARAM_STR;
        }
      }
      // PDO method bindValue (PDOStatement::bindValue)
      $this->stmt->bindValue($param, $value, $type);
  }
  public function execute(){
      return $this->stmt->execute();
  }

//    This is returned by resultset():
//    Multidimemnsional array with column labeled values
//    and numbered values
//    Array
//(
//    [0] => Array
//        (
//            [name] => pear
//            [0] => pear
//            [colour] => green
//            [1] => green
//        )
//
//    [1] => Array
//        (
//            [name] => watermelon
//            [0] => watermelon
//            [colour] => pink
//            [1] => pink
//        )
//
//)
  public function resultset(){
      $this->execute();
      return $this->stmt->fetchAll();
  }

//    This is returned by resultsetAssoc():
//    Multidimemnsional array with column labeled values
//    and NO numbered values
//    Array
//(
//    [0] => Array
//        (
//            [name] => pear
//            [colour] => green
//        )
//
//    [1] => Array
//        (
//            [name] => watermelon
//            [colour] => pink
//        )
//
//)
  public function resultsetAssoc(){
      $this->execute();
      return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
  }
//  With single():
//  The array has only one dimension!!!
  public function single(){
      $this->execute();
      return $this->stmt->fetch();
  }
//  With singleAssoc():
//  The array has only one dimension!!!
  public function singleAssoc(){
      $this->execute();
      return $this->stmt->fetch(PDO::FETCH_ASSOC);
  }
  public function rowCount(){
      return $this->stmt->rowCount();
  }
  public function lastInsertId(){
      return $this->dbh->lastInsertId();
  }
  public function beginTransaction(){
      return $this->dbh->beginTransaction();
  }
  public function endTransaction(){
      return $this->dbh->commit();
  }
  public function inTransaction(){
      return $this->dbh->inTransaction();
  }
  public function cancelTransaction(){
      return $this->dbh->rollBack();
  }
  public function debugDumpParams(){
      return $this->stmt->debugDumpParams();
  }
// array is returned: [0] SQLSTATE, [1] some useless error code [2] error message
  public function errorInfo() {
      return $this->stmt->errorInfo();
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61538739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档