почему эта вставка PDO не работает? - PullRequest
0 голосов
/ 10 мая 2011

, пожалуйста, помогите, это не вставка в БД

$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

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

$ 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)
0 голосов
/ 05 сентября 2012

Фил, хорошо, но если вам нужен 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());
}
0 голосов
/ 10 мая 2011

изменить NOW() на date('Y-m-d H:i:s')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...