在表中插入行 - 如何处理MYSQL函数?

时间:2014-01-25 02:19:44

标签: php mysql binding pdo

我不打算重新发明轮子,但我想在PHP中创建一个简单的insertRow($table, $array)方法。

$array是一个关联数组,其形式为columnName => value,可在表中插入。我打算以

的形式准备一份声明
INSERT INTO `tableName`(`$keys[0], $keys[1], etc`) VALUES (?,?,?)

然后绑定值,然后执行。但是,我不知道如何处理MYSQL函数(例如FROM_UNIXTIME)。我刚学会了我无法绑定函数,它必须出现在预处理语句中。

那么,有没有办法以一种不太复杂的方式处理MYSQL函数?

到目前为止,这是我的方法:

public function insertRow($table, $array){

    $columns = count($array);   //number of columns to insert
    $keys = array_keys($array); //names of the columns
    $vals = array_values($array);   //values of corresponding names $array == ($keys => $vals)

    $strCols = '(`'.implode("`,`", $keys).'`)'; //column names in SQL style string (`col1`, `col2`, `col3`, etc)
    $strVals = $this->bindings_string($columns);    //SQL style for binding values (?,?,?,etc.)

    try{
        $query = $this->db->prepare("INSERT INTO `$table`$strCols VALUES $strVals");

        for($i = 0; $i < $columns; $i++){
            $query->bindValue($i+1, $vals[$i]);         
        }
        $query->execute();
    }catch(PDOException $e){
        echo '<b>Error: </b>', $e->getMessage();        
    }
}

private function bindings_string($count){
    $strVals = '(';
    for($i = 1; $i < $count; $i++){
        $strVals .= '?,';       
    }
    $strVals .= '?)';   
    return $strVals;
}

0 个答案:

没有答案