PHP - 从另一个字符串中删除部分字符串

时间:2009-11-30 12:01:44

标签: php sql

我有以下函数为插入查询创建SQL:

 function insertQuery($data, $table) {
    $key = array_keys($data);
    $sql = "INSERT INTO " . $table . " (" . implode(', ', $key) . ") VALUES " ;
    $val = array_values($data);   
    $sql .= "('" . implode("', '", $val) . "');";

    return $sql;

  }

通常,这很好用。但是,我想返回包含SQL命令LAST_INSERT_ID()的查询。 在运行该函数时,会添加引号,使其返回为“LAST_INSERT_ID()”

是否有一种简单的方法可以删除引号,而无需从其他项中删除引号?

任何建议表示赞赏。 感谢。

2 个答案:

答案 0 :(得分:1)

$sql = str_replace("'LAST_INSERT_ID()'", 'LAST_INSERT_ID()', $sql);

答案 1 :(得分:1)

问题是输入参数在值和函数之间没有区别。你需要找到一种方法来使你的功能显而易见。 我希望你能像这样使用你的功能:

insertQuery(array('name'=>'John', 'age' => 43), 'person');

这样的事情怎么样:

insertQuery(
    array(
        'name'   => 'John', 
        'age'    => 43, 
        'prevId' => array('LAST_INSERT_ID()')
    ), 'person');

function insertQuery($data, $table) {
    $keys = array_keys($data);
    $sql  = "INSERT INTO `" . $table . "` (`" . implode('`, `', $keys) . "`) VALUES ";
    $values = array_values($data);

    $sqlparams = array();

    foreach ($values as $val) {
        if (is_array($val)) {
            $val = $val[0];
        }   
        else {
            # Escape and quote
            $val = '"' . mysql_real_escape_string($val) . '"';
        }   
        $sqlparams[] = $val;
    }   

    $sql .= "(" . implode(", ", $sqlparams) . ");";

    return $sql;
}

我还包括两个错误修正:

  1. 没有mysql_real_escape_string引用总是错误的。参数中的引号会搞乱整个SQL查询。
  2. 在表格和密钥周围添加了引号。这样,您就不会出现同样是SQL中关键字的表和字段名称的错误。