У меня есть следующая функция для создания 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 ()»
Есть ли простой способ удалить цитаты, не удаляя цитаты из других элементов?
Любые советы приветствуются. Благодарю.
$sql = str_replace("'LAST_INSERT_ID()'", 'LAST_INSERT_ID()', $sql);
Проблема заключается в том, что ваши входные параметры не меняют значения и функции. Вам нужно найти способ сделать эту разницу очевидной для вашей функции. Я ожидаю, что вы будете использовать свою функцию следующим образом:
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-запрос.