我有以下函数为插入查询创建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()”
是否有一种简单的方法可以删除引号,而无需从其他项中删除引号?
任何建议表示赞赏。 感谢。
答案 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;
}
我还包括两个错误修正:
mysql_real_escape_string
引用总是错误的。参数中的引号会搞乱整个SQL查询。