#php #pdo
#php #pdo
Вопрос:
пожалуйста, помогите, это не вставка в db
$dbh = new PDO('mysql:host=localhost;dbname=blog', root, root);
if($dbh){
// use the connection here
$stmt = $dbh->prepare("INSERT INTO comments (blog_id,dateposted,name,comment) VALUES (:blog_id,:dateposted,:name,:comment)");
$stmt->bindParam(':blog_id', $validentry);
$stmt->bindParam(':dateposted', NOW());
$stmt->bindParam(':name', $_POST['name']);
$stmt->bindParam(':comment', $_POST['comment']);
$stmt->execute();
// and now we're done; close it
}else{
echo mysql_error();
}
$dbh = null;
//redirect after posting
Комментарии:
1. что с ошибками? Если ошибок нет — значит, либо вы их не видите, либо ошибок нет, и код просто работает нормально.
2. страница без ошибки просто становится пустой после публикации
3. включите ошибки. Это обсуждалось здесь миллион раз. Найдите error_reporting() display_errors. Также прочитайте, как извлекать ошибки из PDO.
mysql_error
не имеет ничего общего с PDO
Ответ №1:
$stmt-> bindParam(‘:dateposted’, NOW());
PDOStatement::bindParam()
привязывает параметр к ссылке на переменную PHP. Как таковой, для этого требуется, чтобы второй аргумент был переменной.
Вместо этого вы можете использовать PDOStatement::bindValue()
для использования литерала или возвращаемого значения из функции.
Кроме того, NOW()
не является функцией PHP и как таковая здесь использоваться не может. Если вы просто хотите использовать функцию DB, жестко запрограммируйте ее в инструкции, например
INSERT INTO comments (blog_id,dateposted,name,comment)
VALUES (:blog_id, NOW(), :name, :comment)
Ответ №2:
измените NOW()
на date('Y-m-d H:i:s')
Комментарии:
1. в зависимости от фактической настройки времени и часовых поясов это может вызвать некоторые проблемы. Я бы предложил просто заменить заполнитель на
NOW()
непосредственно в запросе.2. Это вообще не должно работать с использованием
PDOStatement::bindParam()
Ответ №3:
Фил, хорошо, но если тебе нужен параметр bindParam для присвоения значения в зависимости от условия?
В моем случае я хочу позволить пользователю определять дату создания, если он хочет.
$stmt = $conn->prepare('INSERT INTO news (title_fr, content_fr, creation_date) VALUES (:title_fr, :content_fr, :creation_date)');
if( $date ) {
$stmt->bindParam(':creation_date', $date);
} else {
$stmt->bindParam(':creation_date', NOW());
}