sergeytsalkov/meekrodb

简单的PHP/MySQL库

v3.1.0 2024-08-11 01:40 UTC

This package is auto-updated.

Last update: 2024-09-05 03:28:45 UTC


README

了解更多: http://www.meekro.com

MeekroDB是

  • 一个PHP MySQL库,可以让您用更少的代码行完成更多的工作,并且使SQL注入100%不可能。
  • 自2013年以来,一直是谷歌“php mysql library”排名第一的搜索结果,拥有遍布全球的数千次部署
  • 具有完美安全记录的库。从未发现与安全或SQL注入相关的任何错误。
  • 前后兼容,支持从PHP 5.6到最新PHP 8的所有PHP版本。

安装

准备好开始时,请参阅我们网站上的快速入门指南

手动设置

db.class.php文件包含到您的项目中,并按如下设置

require_once 'db.class.php';
DB::$dsn = 'mysql:host=localhost;dbname=meekrodb';
DB::$user = 'my_database_user';
DB::$password = 'my_database_password';

Composer

将此添加到您的composer.json

{
  "require": {
    "sergeytsalkov/meekrodb": "*"
  }
}

代码示例

从数据库中获取一些行并打印出每行的字段。

$accounts = DB::query("SELECT * FROM accounts WHERE type = %s AND age > %i", $type, 15);
foreach ($accounts as $account) {
  echo $account['username'] . "\n";
}

插入新行。

DB::insert('mytable', array(
  'name' => $name,
  'rank' => $rank,
  'location' => $location,
  'age' => $age,
  'intelligence' => $intelligence
));

获取一行或字段

$account = DB::queryFirstRow("SELECT * FROM accounts WHERE username=%s", 'Joe');
$number_accounts = DB::queryFirstField("SELECT COUNT(*) FROM accounts");

在查询中使用列表

DB::query("SELECT * FROM tbl WHERE name IN %ls AND age NOT IN %li", array('John', 'Bob'), array(12, 15));

记录所有查询和错误

// log all queries and errors to file, or ..
DB::$logfile = '/home/username/logfile.txt';

// log all queries and errors to screen
DB::$logfile = fopen('php://output', 'w');

嵌套事务

DB::$nested_transactions = true;
DB::startTransaction(); // outer transaction
// .. some queries..
$depth = DB::startTransaction(); // inner transaction
echo $depth . 'transactions are currently active'; // 2
 
// .. some queries..
DB::commit(); // commit inner transaction
// .. some queries..
DB::commit(); // commit outer transaction

更多内容 - 查看:http://meekro.com/docs

MeekroDB比PDO好在哪?

可选静态类模式

大多数Web应用程序只会与一个数据库通信。这意味着将$db对象传递到代码的每个函数中只会添加不必要的杂乱。最简单的方法是使用静态方法,如DB::query(),这也是MeekroDB的工作方式。不过,如果您需要数据库对象,MeekroDB也可以做到。

用更少的代码做更多的事情

以下代码在安全方面对您的参数进行转义,运行查询并获取结果的第一行。尝试用PDO在单行内完成。

$account = DB::queryFirstRow("SELECT * FROM accounts WHERE username=%s", 'Joe');

或者只是一个字段呢?

$created_at = DB::queryFirstField("SELECT created_at FROM accounts WHERE username=%s", 'Joe');

轻松使用列表参数

使用MySQL的IN关键字不应该很复杂。MeekroDB为您简化了语法,PDO则没有。

$accounts = DB::query("SELECT * FROM accounts WHERE username IN %ls", array('Joe', 'Frank'));

简单的插入

使用MySQL的INSERT不应该比传递关联数组更复杂。MeekroDB还简化了许多相关命令,包括有用的INSERT .. ON DUPLICATE UPDATE命令。PDO没有做这些。

DB::insert('accounts', array('username' => 'John', 'password' => 'whatever'));

嵌套事务

MySQL的SAVEPOINT命令允许您创建嵌套事务,但您必须自己跟踪SAVEPOINT id。MeekroDB为您做到这一点,因此您可以在没有任何复杂性和学习曲线的情况下进行嵌套事务。

DB::$nested_transactions = true;
DB::startTransaction(); // outer transaction
// .. some queries..
$depth = DB::startTransaction(); // inner transaction
echo $depth . 'transactions are currently active'; // 2
 
// .. some queries..
DB::commit(); // commit inner transaction
// .. some queries..
DB::commit(); // commit outer transaction

灵活的调试日志和错误处理

您可以将所有查询(以及它们产生的任何错误)记录到文件中用于调试。您还可以添加钩子,让您在任何查询处理过程中的任何点运行自己的函数。

我的其他项目

一点不要脸的自我推广!

  • Ark Server Hosting -- Ark: Survival Evolved服务器托管由ArkServers.io提供!
  • brooce - 使用Go编写的语言无关的工作队列!用任何语言编写作业,用任何语言安排它们,在任何地方运行它们!