MySQL의 INSERT가 잘못되었을 때 한 일 + 그 외 여러가지.

개요



관리 유저 신규 등록 기능의 구현을 하는 단계에서, 클라이언트로부터의 입력 정보가 ​​MySQL에 등록되지 않는다(INSERT가 잘 되지 않는) 문제가 발생.
해결을 위해 1시간 정도 조사를 시도했다. 부주의하거나 맹점이라든지 도구에 너무 의존하지 말라고 가르쳤다고 할까 뭐 그런 느낌이지만, 어쨌든 같은 실수를 하지 않는 것이 중요()

전제



이번에는 PHP7계에서 PDO를 이용한 DB 접속을 채용. 연결 자체는 성공적이었고 그에 대한 문제는 발견되지 않았다. 참고까지 이하 테이블의 내용이나 소스나.

【컬럼 정보】
・id:약속의 녀석.
· username : "name"이 예약어라는 것을 몰랐기 때문에 username에게.
・password1: 패스워드 입력용.
・password2:패스워드(확인) 입력용.

SignUp.php
<?php
    //ユーザー新規登録
    if(isset($_POST['signin'])){
        $username = $_POST['username'];
        $password1 = $_POST['password1'];
        $password2 = $_POST['password2'];
        try{
            $db = new PDO('mysql:host=localhost;dbname=ACCOUNT','root','root');
            $sql = 'INSERT INTO USERS(username, password1, password2) VALUES(?, ?, ?)';
            $stmt = $db->prepare($sql);
            $stmt->execute(array($username, $password1, $password2));
            $stmt = null;
            $db = null;
        }catch(PDOException $e){
            echo $e->getMessage();
            exit;
        }
    }
?>

※password1과 password2는 나중에 추가 구현할 예정이므로 이번에는 할애.

우선 쿼리 로그 보기



DB는 그다지 적극적으로 에러 토해주지 않기 때문에, 우선 로그를 확인해 기분을 느낀다.
mysql> show full processlist\G;
*************************** 1. row ***************************
     Id: 147
   User: root
   Host: localhost
     db: ACCOUNT
Command: Query
   Time: 0
  State: starting
   Info: show full processlist
1 row in set (0.00 sec)

ERROR:
No query specified

흠. 확실히 안돼, 라고.
이번에는 phpMyAdmin을 조금만 들여다 보는 것에.

역시. . .


테이블 편집으로 하나하나 확인해 보았는데 안의 정입니다.



id에 auto_increment가 지정되지 않은 ,,,



정말로 괴롭힘.

기타 : 문자 코드도 드디어 편집



그 후, 입력 화면으로부터 데이터의 등록까지 잘 되었습니다만, 문자 코드도 통일되어 있지 않은 것 같아서.
이 때의 제대로 정비해 두었습니다. 나중에 작업할 때, 터무니 없이 귀찮게 되거나 하는 이야기도 들었으므로 정중하게 정중하게.
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

이 녀석,
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

이렇게 합니다. latin1이 된 문자 코드를 utf8로 변경했습니다.
여기 근처의 설정이 끝나면 테이블을 재구축해 갑니다. 정말 귀찮았기 때문에 앞으로는 이 근처의 설정도 먼저 확인해 두어야 한다고 생각했습니다.



사용자 이름: 테스트
경로 1: user1
패스2(확인용):user1

에 등록해 보면,
mysql> select*from USERS;
+----+-----------+-----------+-----------+
| id | username  | password1 | password2 |
+----+-----------+-----------+-----------+
|  1 | テスト    | user1     | user1     |
+----+-----------+-----------+-----------+
1 row in set (0.00 sec)

했어.

참조한 선인들의 지혜는 아래 URL에서 참조를 잘 부탁드립니다. 모두 알기 쉬웠다… 눈물

선인들의 지혜



· php에서 mysql 테이블로 INSERT 할 수 없다
htps : // 놀라운 l. 코 m / 쿠에 s 치온 s / 12280

· 문자 코드 확인 및 변경
htps : //p 로엔기네 r. 이런 r의 s. 이. jp / 콘텐 t / 코 m 펑 아츠레 / 6653

· MySQL의 기동에 관한 것
htps : // 이 m/없음 r_fkm/이고 ms/7013655다 212b0 에후아 6f

· 콘솔에서 문자 코드 설정 변경
htps : // m / 우세 r0 / ms / a 9116 c7bd7b70 cfb0

요약



・테이블을 만들 때는 가능한 한 새지 않고 정중하게 설계.
・문자화 → 문자코드 설정을 바꾼다. 때로는 콘솔 측의 설정도 수정해 본다.

기본적인 기능의 실장하고 있는 동시에 주변 지식도 점점 따라오지 말라고 생각했다(소병감).

좋은 웹페이지 즐겨찾기