anomalous/iron-sql

PHP数据库适配器,适用于MySQL数据库。灵感来源于MeekroDB。

2.5 2019-06-13 04:52 UTC

This package is auto-updated.

Last update: 2024-09-13 16:38:12 UTC


README

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

IronSQL是

  • 一个PHP MySQL库,让您用更少的代码行完成更多的工作,并且使SQL注入100%不可能。
  • MeekroDB缺少一些功能,所以我决定克隆存储库,开始自己的版本。

安装

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

手动设置

db.class.php文件包含到您的项目中,并按照以下方式进行设置

require_once 'db.class.php';
DB::$host = 'my_host_name';
DB::$user = 'my_database_user';
DB::$password = 'my_database_password';
DB::$dbName = 'my_database_name';

Composer

将此添加到您的composer.json

{
  "require": {
    "anomalous/iron-sql": "*"
  }
}

代码示例

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

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

嵌套事务

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://www.meekro.com/docs.php

IronSQL如何比PDO更好?

可选静态类模式

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

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

下面的代码安全地转义了您的参数,执行了查询,并获取了结果的第一行。尝试用PDO在单行中完成这项任务。

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

轻松使用列表参数

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

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

简单的插入

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

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

专注于目标,而不是任务

想自己执行INSERT而不是依赖于DB::insert()?这很简单。我甚至不想去想您在PDO中需要多少行代码才能做到这一点。

// Insert 2 rows at once
  DB::query("INSERT INTO %b %lb VALUES %ll?", 'accounts',
  array('username', 'password', 'last_login_timestamp'),
  array(
    array('Joe', 'joes_password', new DateTime('yesterday')),
    array('Frank', 'franks_password', new DateTime('last Monday'))
  )
);

嵌套事务

MySQL的SAVEPOINT命令允许您创建嵌套事务,但前提是您自己跟踪SAVEPOINT ID。IronSQL为您做这件事,因此您可以无复杂性或学习曲线地拥有嵌套事务。

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

灵活的错误和成功处理器

设置自己的自定义函数,在错误发生时或在每个查询成功时运行。您可以为开发版本和实时版本的应用程序轻松地拥有不同的错误处理行为。想计算所有查询及其运行时间?只需添加一个新的成功处理器。

更多关于IronSQL设计理念的介绍: http://www.meekro.com/beliefs.php