首页 > 解决方案 > 将 PHP 基于字符串的查询转换为动态数组

问题描述

我正在尝试为自己制作一个 NoSQL 脚本。然而,我一直很喜欢 MySQL 使用的“单行查询”方法。例如:

$sql = "SELECT id, firstname, lastname FROM MyGuests";

如果我想使用纯 PHP 使用相同的查询,我最终会使用一个数组。像这样:

$sql = array(
    "SELECT" => "id, firstname, lastname",
    "FROM" => "MyGuests",
);

尽管它以这种方式工作得很好,但它并不像它应该的那样优雅。我试过 PHP 的爆炸功能:

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$sql_query = explode(" ", $sql);    

这将输出:

Array
    (
        [0] => SELECT
        [1] => id,
        [2] => firstname,
        [3] => lastname
        [4] => FROM
        [5] => MyGuests
    )

现在你可以说:$sql_query[0]等于 SELECT,$sql_query[4]等于 FROM。然而问题是:这些值不是固定的。当我要添加像“WHERE”这样的条件时,我必须为每个场景创建一个 if-else 语句。并且 SELECT 的值的数量(在本例中为 (3):id、first name、lastname)将始终是随机的。它可以是更多的值,也可以是更少的值。长话短说:我最终会花费数小时制作一个预定义所有可能场景的 PHP 脚本。

我的问题是:是否有一种方法可以将基于字符串的查询“转换”为数组,而无需预先定义所有内容?它必须找到诸如 SELECT、UPDATE、WHERE、FROM 等词,并获取这些内容之后的值。所以一种更优雅和动态的方式。

例子:

"SELECT id, username FROM Users"

应转换为:

 $sql = array(
      "SELECT" => "id, username",
      "FROM" => "Users",
 );

和:

"SELECT * FROM Users WHERE Country=US"

或者:

"SELECT * WHERE Country=US FROM Users"

应转换为:

$sql = array(
       "SELECT" => "*",
       "FROM" => "Users",
       "WHERE" => "Country=US",
);

它应该知道像 (FROM, WHERE) 这样的另一个词从哪里开始,因此它不会将该词作为值。它应该能够被随机化。

(如果这个问题不清楚,我很抱歉,我对 PHP 还是很陌生。)

提前感谢您抽出宝贵时间阅读本文!

标签: phparraysjsonnosql

解决方案


推荐阅读