11180


PHPでサインインAPIを作成したのですが、以下のコードに書かれている箇所でmysqlへのインサートが失敗してしまいます。いろいろ試してみたのですが、どこが間違っているのかわかりません。  
いろいろ試した結果以下のことがわかりました。

  * `lastInsertId()`は正しく呼ばれていてidを取得出来ている。
  * 1つ前のINSERTは成功している。
  * テーブル名、カラム名は正しい。
  * エラーは出ない。

どなたか、どこが間違っているのかわかりますか?

**ソースコード**

[code]

    <?php
    header("Content-Type: application/json; charset=UTF-8");
    header("X-Content-Type-Option: nosniff");
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
    require_once 'functions.php';
    require_once 'session_util.php';
    
    $pdo = initDB();
    switch($_SERVER['REQUEST_METHOD']){
      case 'POST':
        $in = json_decode(file_get_contents('php://input'), true);
        $error = '';
        if(isset($in['mail_address'])&&isset($in['password'])&&isset($in['username'])){
          if(!checkEmail($pdo, $in['mail_address'])){
            $error = "メールアドレスが登録済みです。";
            header("HTTP/1.0 402 Unauthexed");
            sendError($error);
          }else{
            $st = $pdo->prepare("INSERT INTO user (mail_address, password, username) VALUES (:mail_address, :password, :username)");
            $st->bindParam(':mail_address', $in['mail_address'], PDO::PARAM_STR);
            $hashedPassword = makeHash($in['password']);
            $st->bindParam(':password', $hashedPassword, PDO::PARAM_STR);
            $st->bindParam(':username', $in['username'], PDO::PARAM_STR);
            if($st->execute()){
              $userId = $pdo->lastInsertId('id');
              $st2 = $pdo->prepare("INSERT INTO user_profile (user_id, username) VALUES (:user_id, :username)");
              $st2->bindValue(":user_id", $userId, PDO::PARAM_INT);
              $st2->bindParam(":username", $in['username'], PDO::PARAM_STR);
              //このif文で失敗する。
              if($st2->execute()){
                header("HTTP/1.0 200 OK");
                onSuccess($pdo, $in['mail_address'], $userId);
              }else{
                $error="Un known error.";
                sendError($error);
              }
            }else{
              $error = "server error";
              header("HTTP/1.0 500 Internal Server Error");
              sendError($error);
            }
          }
        }else{
          $error = "メールアドレスとパスワードを入力してください。";
          header("HTTP/1.0 400 Bad Request");
          sendError($error);
        }
        break;
    }
    
[/code]


CC BY-SA 3.0
2015-06-06T12:32:09.707
11046
2023-07-05T19:08:21.477
7232
question
php mysql pdo
PHP、PDOでINSERTできない。


SQL文がエラーになっていそうなので

[code]

          //このif文で失敗する。
          if($st2->execute()){
            header("HTTP/1.0 200 OK");
            onSuccess($pdo, $in['mail_address'], $userId);
          }else{
            $error="Un known error.";
            sendError($error);
          }
    
[/code]

のelse節の中で

[code]

            $st2->errorInfo();
    
[/code]

によって実際のエラー原因を調べてみたほうが良いと思います。


CC BY-SA 3.0
2015-06-08T10:06:40.943
11119
2015-06-08T10:06:40.943
5518
11046
answer


自己解決いたしました。原因はuser_profileテーブルのidがauto_incrementになっていませんでした。  
お騒がせしてしまい申し訳ありませんでした。


CC BY-SA 4.0
2015-06-09T10:28:34.667
11180
2023-07-05T19:07:11.010
2023-07-05T19:07:11.010
3060
7232
11046
answer


エラーの原因はわかり易くなるために毎度以下のlogファイルを見たほうがいいと思います。

[code]

    SHOW VARIABLES LIKE '%log_file%';
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/np8ub.png)](https://i.stack.imgur.com/np8ub.png)

**すみません、日本語は少しだけしゃべれます。


CC BY-SA 4.0
2023-07-05T16:35:50.513
95489
2023-07-05T19:08:21.477
2023-07-05T19:08:21.477
3060
58988
11046
answer