2009-11-30 44 views
1

我有下面的函數創建一個插入查詢的SQL刪除字符串的一部分。不過,我想返回包含SQL命令LAST_INSERT_ID()的查詢。 當通過函數運行時,添加了引號,因此它返回爲'LAST_INSERT_ID()'PHP從另一個字符串

有沒有簡單的方法來刪除引號,而不從其他項目中刪除引號?

任何意見讚賞。 謝謝。

回答

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

當OP想要使用其他功能時,這是如何工作的? – 2009-11-30 12:06:54

+0

對不起,作爲一個屁股,但整個問題反映了糟糕的設計決策,隨着時間的推移會變得越來越糟糕。他的六行代碼也包含至少兩個錯誤。 – 2009-11-30 12:22:48

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中的關鍵字)獲取錯誤。
相關問題