在为多个插入使用PDO-MYSQL预处理语句时,将NOW()函数作为非字符串传递?

时间:2016-11-03 13:21:44

标签: php mysql pdo

我在7个列的表格中的单个查询中插入多行(此处仅显示3列,以便于阅读和输入)。名为created_on的列之一是插入的当前时间。但是我正在构建数组,并在构建数组时将now()作为字符串传递。但是,在执行此操作时,我会在列' created_on'中获得超出范围的值。因为MySQL正在接收函数now()作为字符串' now()'来自PHP而不是now()。如何正确地将now()传递给MySQL,以便查询正确运行。如果我在创建数组时删除引号,那么我会收到PHP错误。我正在以下列方式准备我的查询:

    $datafields = array('fielda', 'fieldb', 'created_on');

    $data = array(value1a, value1b, 'now()',value2a, value2b, 'now()' ....valueNa, valueNb, 'now()');

其中N(和变量$ N)是总行数,对于表中的每个插入,通常为100,000到100万

    function placeholders($text, $count=0, $separator=","){
        $result = array();
        if($count > 0){
            for($x=0; $x<$count; $x++){
                $result[] = $text;
            }
        }

        return implode($separator, $result);
    }
    $pdo->beginTransaction(); // also helps speed up your inserts.
    for($i=0;$i<$N;$i++){
        $question_marks[] = '('  . placeholders('?', 7) . ')';

    }

    $sql = "INSERT INTO code (" . implode(",", $datafields ) . ") VALUES " . implode(',', $question_marks);
    $stmt = $this->db->prepare($sql);
    try {
        $stmt->execute($data);
    } catch (PDOException $e){
        echo $e->getMessage();
    }
    $pdo->commit();

1 个答案:

答案 0 :(得分:0)

而不是现在(),使用日期(&#39; Y-m-d H:i:s&#39;)

编辑 我假设created_on的类型为datetime