СМЕХ в том, что даже если бы ваши существующие ошибки были исправлены, код ВСЕ ЕЩЕ был бы мусором, поскольку вы тратите время на создание переменных впустую и вводите их непосредственно в строку запроса.
Это называется подготовить/bind_param/execute, ИСПОЛЬЗУЙТЕ ЭТО! (хотяbind_param и mysqli_stmt такие чушь, это одна из причин, почему я предпочитаю PDO)
МНОГО ваших ошибок даже не существовало бы, если бы вы использовали объектный метод (то есть правильное использование) mysqli вместо полоумного костыля, которым являются процедурные модели.
(еще одна причина, по которой я предпочитаю PDO, в нем нет этой хрени)
Я ДУМАЮ, что вы пытаетесь сделать следующее (предупреждение, могут быть опечатки)
$stmt = $db->prepare('
INSERT INTO comments (
name, comment, post_time
) VALUES (
:name, :comment, NOW()
)
');
$stmt->execute([
':name' => $_POST['user_name'],
':comment' => $_POST['user_comm']
]);
$id =$db->lastInsertId();
$stmt = $db->prepare('
SELECT name, comment, post_time
FROM comments
WHERE id = ?
');
$stmt->bindParam(1, $id);
$stmt->execute($id);
Код (разметка): Хотя, опять же, это прекрасный пример того, насколько PDO превосходит mysqli:
<?php ini_set('display_errors', 1); $db = new PDO( 'mysql:host=localhost;dbname=comments', 'root', 'mypass123' ); if ( array_key_exists('user_comm', $_POST) && array_key_exists('user_name', $_POST) ) { $stmt = $db->prepare(' INSERT INTO comments ( name, comment, post_time ) VALUES ( :name, :comment, NOW() ) '); $stmt->execute([ ':name' => $_POST['user_name'], ':comment' => $_POST['user_comm'] ]); $stmt = $db->prepare(' SELECT name, comment, post_time FROM comments WHERE name = :name AND comment = :comment '); $stmt->execute([ ':name' => $_POST['user_name'], ':comment' => $_POST['user_comm'] ]); if ($row = $stmt->fetch()) { // don't forget to escape/sanitize user generated values! echo ' <div class="comment"> <p class="comment">', htmlspecialchars($row['comment']), '</p> <p class="name">by: ', htmlspecialchars($row['name']), '</p> <p class="time">', $row['post_time'], '</p> </div>'; } else echo ' <p class="notFound">Not found after Insert?!?</p>'; } // you do not need to 'exit' here, and avoid closing ?>
Код (разметка): Хотя, если бы я писал это, чтобы получить временную метку с момента ее создания, я бы НЕ использовал сложный поиск, а вместо этого извлекал бы идентификатор из вставки.
<?php ini_set('display_errors', 1); $conn = new mysqli( 'localhost', 'root', 'mypass123', 'comments' ); if ( array_key_exists('user_comm', $_POST) && array_key_exists('user_name', $_POST) ) { $stmt = $conn->prepare(' INSERT INTO comments ( name, comment, post_time ) VALUES ( ?, ?, NOW() ) '); $stmt->bindParam( 'ss', $_POST['user_name'], $_POST['user_comm'] ); $stmt->execute(); $stmt = $conn->prepare(' SELECT name, comment, post_time FROM comments WHERE name = ? AND comment = ? '); $stmt->bindParam( 'ss', $_POST['user_name'], $_POST['user_comm'] ); $stmt->execute(); $stmt->bind_result( $user, $comment, $time ); if ($stmt->fetch()) { // don't forget to escape/sanitize user generated values! echo ' <div class="comment"> <p class="comment">', htmlspecialchars($comment), '</p> <p class="name">by: ', htmlspecialchars($name), '</p> <p class="time">', $time, '</p> </div>'; } else echo ' <p class="notFound">Not found after Insert?!?</p>'; } // you do not need to 'exit' here, and avoid closing ?>
Код (разметка): если предположить, что ваша таблица представляет собой уникальный столбец с автоматическим приращением идентификатора, это будет НАМНОГО быстрее, чем полнотекстовое сравнение нескольких полей.
НЕ то, что на практике я бы вернул имя или комментарий, поскольку они все равно будут существовать в $_POST, так зачем тратить память, базу данных и время подключения к сокету, извлекая информацию, которая у вас уже есть?