2009-11-30 7 views
1

У меня есть следующие функции для создания SQL для запроса вставки:PHP - Удалить часть строки из другой строки

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()»

Есть ли простой способ удалить цитаты, не удаляя цитаты из других предметов?

Любые советы, оцененные. Спасибо.

ответ

1
$sql = str_replace("'LAST_INSERT_ID()'", 'LAST_INSERT_ID()', $sql); 
+0

Как это работает, когда OP хочет использовать другую функцию? –

+0

Извините за то, что я задница, но весь вопрос пахнет плохими дизайнерскими решениями, которые станут еще хуже и хуже, когда время продолжится. Также его шесть строк кода содержат как минимум две ошибки. –

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.
Смежные вопросы