почему эта вставка PDO не работает?

#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());
}