Datetime NOW PHP mysql (+ вариант PDO)
Спасибо, что посмотрели. Все полезные ответы/комментарии голосовали.
В php вы можете использовать NOW() следующим образом:
mysql_query("INSERT INTO tablename (id, value, time_created)
VALUES ('{$id}', '{$value}', NOW())");
Как я могу сделать то же самое в PDO. Когда я связываюсь так, я получаю сообщение об ошибке:
$stmt->bindParam(':time_added', NOW(), PDO::PARAM_STR);
Это PDO: PARAM_STR?
Ответы
Ответ 1
Просто сделайте следующее:
mysql_query("INSERT INTO tablename (id, value, time_created)
VALUES ('$id', '$value', NOW())");
Хотя вы должны иметь правильный тип столбца. date
или time
один, не будет работать, если я правильно напомню; он должен быть datetime
или, может быть, timestamp
?
Внимание
mysql_*
устарел из PHP 5.5.0 и выше: http://php.net/manual/en/function.mysql-query.php
Вместо этого используйте PDO; см. ответ Стефана Герига.
Ответ 2
Поскольку никто явно не ответил на вопрос, я добавлю правильный ответ для полноты картины.
$stmt = $pdoDb->prepare('INSERT INTO tablename (id, value, time_created) VALUES (:id, :value, NOW())');
// either bind each parameter explicitly
$stmt->bindParam(':id', $id); // PDOStatement::bindValue() is also possibly
$stmt->bindParam(':value', $value);
$stmt->execute();
// or bind when executing the statement
$stmt->execute(array(
':id' => $id,
':value' => $value
));
Ответ 3
Предполагая, что ваша инструкция PDO верна, вы можете сделать что-то вроде этого:
$date = date('Y-m-d H:i:s');
$stmt->bindParam(':time_added', $date, PDO::PARAM_STR);
Ответ 4
Ни один из ответов не решает вопрос, как я вижу!
Итак, есть некоторые мои выводы:
нет никакого способа заставить PDO передать вызов функции MySQL в качестве значения запроса - поэтому нет возможности сделать простую оболочку, которая сможет использовать NOW() или любую другую функцию в качестве переданных значений. Каждый раз, когда вам нужно что-то подобное, вам нужно вручную изменить запрос, поэтому вызов функции является частью строки запроса.: - (
Я использую функцию, которая проверяет заданные значения для функции MySQL, которую я использую и модифицирую сам запрос, но это не очень хорошее решение для моего мнения...: -}
Ответ 5
Это может быть полезно некоторым из вас, возможно, нет. Я столкнулся с той же проблемой, что и Олли Сондерс. Я новичок в php/mysql, и больше всего PDO. Я смог решить проблему со следующим:
$active = 0;
$id = NULL;
$query = "INSERT
INTO tbl_user(ID_user, firstname, lastname, email, password, active, create_date)
VALUES (?,?,?,?,?,?,NOW())";
if($stmt=$this->conn->prepare($query)) {
$stmt->bind_param('issssi', $id, $firstname, $lastname, $email, $password, $active);
$stmt->execute();
}
и угадайте, что он работает! Надеюсь, что помогли здесь. Любые комментарии приветствуются. Попробуйте и скажите, работает ли это для вас, или если у вас есть какие-либо дополнения.
Ответ 6
кроме NOW() я также использую столбец типа timestamp и устанавливаю его значение по умолчанию CURRENT_TIMESTAMP.. поэтому я просто ничего не пропускаю для этого поля, и время автоматически устанавливается. возможно, не совсем то, что ищут.
Ответ 7
Чтобы ответить на вопрос Elmo, вы можете создать оболочку PDO, которая позволяет выполнять функции SQL, такие как NOW(). Вам просто нужно передать дополнительный аргумент с столбцами, для которых вы хотите использовать функции SQL. Здесь моя:
function pInsertFunc($action, $table, $values, $sqlfunctions)
{
global $pdb;
// There no way to pass an SQL function like "NOW()" as a PDO parameter,
// so this function builds the query string with those functions. $values
// and $sqlfunctions should be key => value arrays, with column names
// as keys. The $values values will be passed in as parameters, and the
// $sqlfunction values will be made part of the query string.
$value_columns = array_keys($values);
$sqlfunc_columns = array_keys($sqlfunctions);
$columns = array_merge($value_columns, $sqlfunc_columns);
// Only $values become ':paramname' PDO parameters.
$value_parameters = array_map(function($col) {return (':' . $col);}, $value_columns);
// SQL functions go straight in as strings.
$sqlfunc_parameters = array_values($sqlfunctions);
$parameters = array_merge($value_parameters, $sqlfunc_parameters);
$column_list = join(', ', $columns);
$parameter_list = join(', ', $parameters);
$query = "$action $table ($column_list) VALUES ($parameter_list)";
$stmt = $pdb->prepare($query);
$stmt->execute($values);
}
Используйте его следующим образом:
$values = array(
'ID' => NULL,
'name' => $username,
'address' => $address,
);
$sqlfuncs = array(
'date' => 'NOW()',
);
pInsertFunc("INSERT INTO", "addresses", $values, $sqlfuncs);
Строка запроса, которая выглядит так:
INSERT INTO addresses (ID, name, address, date) VALUES (:ID, :name, :address, NOW())