받은 편지함 시스템에서 작업하고 있습니다. 프런트 엔드에서는 jQuery와 Ajax를 사용하므로 페이지가 새로 고쳐지지 않습니다. 나는 그 부분을 다루었 다. 백엔드에는 데이터를 삽입하는 3 개의 테이블 (현재는)이 있습니다. 여기 PHP 하나의 테이블 (MySQL)에 데이터를 삽입하는 준비된 문
는 관계 구조의 기본 개요입니다 다음 SENDER_ID는 항상 0이기 때문에 이conversations:
conversation_id int(11) primary key
conversation_subject varchar(128)
conversations_members:
conversation_id int(11)
user_id int(11)
conversation_last_view int(10)
conversation_deleted int(1)
conversations_messages:
message_id int(11) primary key
conversation_id int(11)
user_id int(11)
message_date timestamp
message_text text
추가적인 문제가 있습니다,하지만 그것이 주제와 이후 또 다른 질문을 위해해야 할 것이다. 문제는 conversations_members 테이블에 있습니다. 다른 모든 것은 conversations 및 conversations_messages 테이블에 입력됩니다. 다음은 PHP입니다. 이 문제는 아래쪽의 마지막 SQL 쿼리입니다.
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
include('../inc/connect.php');
if (!isset($_SESSION['username'])) {
session_start();
}
$recipient_username = "";
$sender_id = "";
$a = 0;
$b = 0;
if(isset($_POST['subject'], $_POST['msg_body']) && !empty($_POST['subject']) && !empty($_POST['msg_body'])) {
//get ID of sender
$sender_id_query = "SELECT id FROM `users` WHERE username = ?";
$stmt = $connection->prepare($sender_id_query);
$stmt->bind_param('s', $_SESSION['username']);
$stmt->execute();
$result = mysqli_query($connection, $sender_id_query);
if($result) {
while($row = mysqli_fetch_assoc($result)) {
//$row['id'] = $sender_id; //neither of these work
$sender_id = $connection->insert_id; //Always zero
}
}
$stmt->close();
//get username of recipient
$recipient_name_query = "SELECT * FROM `users`";
$result = mysqli_query($connection, $recipient_name_query);
if($result) {
while($row = mysqli_fetch_assoc($result)) {
$row['username'] = $recipient_username;
}
}
//define post variables
$msg_subject = $_POST['subject'];
$msg_body = $_POST['msg_body'];
$subject = $connection->real_escape_string(htmlentities($msg_subject));
$body = $connection->real_escape_string(htmlentities($msg_body));
$conversation_id = mysqli_insert_id($connection);
//GET RECIPIENT ID
$sql = "SELECT id FROM `users` WHERE username=?";
$stmt = $connection->prepare($sql);
$stmt->bind_param('s', $recipient_username);
$result = mysqli_query($connection, $sql);
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
$recipient_id = $row['id'];
}
}
$stmt->close();
//INSERT SUBJECT INTO CONVERSATIONS TABLE
$stmt = $connection->prepare("INSERT INTO `conversations` (conversation_subject) VALUES(?)");
$stmt->bind_param('s', $subject);
$stmt->execute();
$stmt->close();
//INSERT THE IDs AND TIMESTAMPS INTO MESSAGES TABLE
$stmt = $connection->prepare("INSERT INTO `conversations_messages` (conversation_id, user_id, message_date, message_text)
VALUES(?, ?, NOW(), ?)");
$stmt->bind_param('iis', $conversation_id, $sender_id, $body);
$stmt->execute();
$stmt->close();
/*
THE FOLLOWING DATA DOES NOT GET INSERTED.....
*/
//INSERT IDs, LAST_VIEWED, AND DELETED INTO MEMBERS TABLE
$stmt = $connection->prepare("INSERT INTO `conversations_members` (conversation_id, user_id, conversation_last_view, conversation_deleted)
VALUES (?, ?, ?, ?)");
$stmt->bind_param('iiii', $conversation_id, $recipient_id, $a, $b);
$stmt->execute();
$stmt->close();
}
오류가 발생하지 않으며 오타가 표시되지 않습니다. 나는 어디로 잘못 갔는가?
시도 디버깅 : '$ Q = $ stmt-> bind_param ('IIII '$ conversation_id, $ recipient_id, $ A, $ b),'' 위해서 var_dump ($의 Q); var_dump ($ stmt-> error)' –
추가'ini_set ('display_errors', 1); ini_set ('log_errors', 1); error_reporting (E_ALL); mysqli_report (MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);'를 스크립트 상단에 추가하십시오. 이것에 의해, mysqli_의 모든 에러가 강제적으로 무시되어 버리거나 무시할 수없는 Exception을 생성한다 ( ). – RiggsFolly
'mysqli_fetch_assoc()'은 객체가 아닌 배열을 반환합니다. 따라서'$ sender_id = $ row [ 'id']' – RiggsFolly