PHP - Başka bir dize dize kısmını çıkarın

1 Cevap php

Ben bir ekleme sorgusu için SQL oluşturmak için aşağıdaki işlevi vardır:

 function insertQuery($data, $table) {
    $key = array_keys($data);
    $sql = "INSERT INTO " . $table . " (" . implode(', ', $key) . ") VALUES " ;
    $val = array_values($data);   
    $sql .= "('" . implode("', '", $val) . "');";

    return $sql;

  }

Normally, this works fine. However I would like to return a query containing the SQL command LAST_INSERT_ID(). When run through the function, quotes are added so it returns as 'LAST_INSERT_ID()'

Diğer öğeleri tırnak çıkarmadan, tırnak çıkarmak için basit bir yolu var mı?

Any advice appreciated. Thanks.

1 Cevap

The problem is that your input parameters don't make a difference between values and functions. You need to find a way to make that difference obvious to your function. I expect you use your function like this:

insertQuery(array('name'=>'John', 'age' => 43), 'person');

Nasıl böyle bir şey hakkında:

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;
}

Ayrıca iki hata düzeltmesi Dahil

  1. mysql_real_escape_string alıntı olmadan her zaman yanlıştır. Lütfen parametre olacak pisliği bütün SQL sorgu bir alıntı.
  2. Masa etrafında tırnak ve tuşları eklendi. Eğer da vardır tablo ve alan adları için hataları almazsınız bu şekilde SQL anahtar kelimeler.