Реализуйте глобальные функции для подключения к базе данных и выполнения запросов в PHP - PullRequest
0 голосов
/ 01 мая 2020

Я нахожусь в фазе обучения PHP. Может ли кто-нибудь помочь мне написать несколько функций:

  • ConDB($host, $user, $pwd) для подключения к базе данных MySQL через PDO.

  • RunSQL($sql) для выполнения операторов (например, CREATE, INSERT, UPDATE, DELETE). Эта функция будет использовать функцию ConDB() для подключения к базе данных и выполнения $sql, а затем автоматически закрыть соединение.

  • QuerySQL($sql) для запроса к базе данных. Он должен возвращать массив наборов записей, которые мы можем использовать в дальнейшем для отображения в виде таблицы на странице.

Функции RunSQL() и QuerySQL() должны быть доступны на любых .php страницах.

Если можно сделать что-то лучшее для достижения этой цели, это будет здорово помогите мне. Спасибо.

Например, я хочу написать следующее:

$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)

Затем, через некоторое время l oop, мы можем извлечь данные в таблицу. Я надеюсь, что идея вам ясна.

1 Ответ

1 голос
/ 01 мая 2020

Комментарий Найджела Рена верен, но, поскольку у меня была такая же проблема пару лет, go вот ссылка, которую я использовал в то время. Также есть примеры использования. Сверните свой собственный класс PDO

Ниже вы видите мой класс Database, который я создал на основе этого примера, и некоторые константы, которые я использую в этом классе, а также один простой пример использования.

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();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...