PHP – удалить часть строки из другой строки

У меня есть следующая функция для создания 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; } 

Я также включил два исправления:

  1. Без цитирования mysql_real_escape_string всегда неправильно. Цитата в вашем параметре испортит весь ваш SQL-запрос.
  2. Добавлены кавычки по таблице и клавишам. Таким образом, вы не получите ошибок для имен таблиц и полей, которые также являются ключевыми словами в SQL.