开发者

PHP Method to Concatenate Array and String

I am building a PHP class to handle database management, and I wondered if it was possible to build a method which could receive a string with a concatenated array as one variable.

For example, take a look at this simplified code:

class Databa开发者_如何转开发se {
    function __construct() {
        // Connect to the database, code not shown
    }

    public function query($input) {
        // Do something with the input so the string values are recognized ...
        // and the array and its keys are converted into an SQL string.
        // Code not shown...

        mysql_query($processedInput);
        return true;
    }
}

So, ideally, if I run something like this ...

$db = new Database();
$db->query("UPDATE `table` SET " . 
            array("id" = "2",
                  "position" = "1",
                  "visible" = "1",
                  "name" = "My Name's John",
                  "description" = "This is neat!"
            ) . " WHERE `id` = '1'");

... PHP would generate, then run this SQL ...

mysql_query("UPDATE `table` SET `id` = '2', `position` = '1', `visible` = '1', 
`name` = 'My Name\'s John', `description` = 'This is neat!' WHERE `id` = '1'");

I can do all of the nitty-gritty array conversion, but, for now, all I need is a way for PHP to break the input up into strings and arrays, then evaluate each one separately.

I would like to avoid passing multiple values into the method.


In Ruby you could do this, but you're out of luck in PHP. The good news is, you can modify what you're doing slightly to pass the query and the parameters separately as arguments to the query method:

$db->query("UPDATE `table` SET ? WHERE `id` = '1'", array(
  "id" = "2",
  "position" = "1",
  "visible" = "1",
  "name" = "My Name's John",
  "description" = "This is neat!"
);

And then handle the interpolation and concatenation in your Database object:

class Database {
    function __construct() {
        // Connect to the database, code not shown
    }

    public function query($query, $input) {
        $sql = $this->_normalize_query($query, $input)

        mysql_query($sql);
        return true;
    }

    protected function _normalize_query($query, $input) {
      $params = "";
      foreach($input as $k => $v) {
        // escape and assemble the input into SQL
      }
      return preg_replace('/\?/', $params, $query, 1);
    }
}

However

There are already a lot of ORMs out there that are very capable. If you are looking for something to only assemble queries and not manage results, you can probably find something as well. It seems like you're reinventing the wheel needlessly here.

Good PHP ORM Library?


You could write a sort of Helper functions which would work something like:

(inside of class Database { )

public function ArrayValues($array)
{
    $string = "";

    foreach($array as $Key => $Value)
    {
        $string .= "`$Key` = '$Value' ,";
    }
    // Get rid of the trailing ,

    // Prevent any weird problems
    if(strlen($string) > 1)
    {
        $string = substr($string, 0, strlen($string) - 2);
    }

    return $string;
}

Then you'd use it like:

$db->query("UPDATE `table` SET " . 
            $db->ArrayValues(array("id" = "2",
                  "position" = "1",
                  "visible" = "1",
                  "name" = "My Name's John",
                  "description" = "This is neat!"
            )) . " WHERE `id` = '1'");

I haven't tested this, however it should work.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜