質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.91%

エラー表示 General error: 1366 Incorrect integer value: '' for column 'id' at row 1

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 525

nguyenseiji

score 46

現在mysqlにphpのPOST形式でデーターを入れようとしているのですが

エラーがでてしまい調べても修正方法がわからないため質問させていただきました

『エラーコード』
メンテナンス中の為ご迷惑をおかけいたします
id変数の展開->
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\MAMP\htdocs\database\receive.php:34 Stack trace: #0 C:\MAMP\htdocs\database\receive.php(34): PDOStatement->execute(Array) #1 {main}

id変数の展開->で一度$id変数を表示してみましたがnull?みたいです
数字はinputで確認に入れたのですが...

 <form method="post" action="http://localhost:80//database/receive.php" name="formName">


 <div>商品ID</div>      
        <input type="number" name="id" id="id">


  <input type="submit" value="登録" name="register" id="register" />


    </form>
<?php

ini_set('mbstring.internal_encoding','UTF-8');



try{


$id=$_POST["id"];


$id=htmlspecialchars($id,ENT_QUOTES,"UTF-8");




if($id=""){

print "商品IDを入れてください"; 
print '<br>';

}

require_once "../confidential/detabaseAccses.php";

$sql="insert into ilysb(id) values(?)";

$stmt=$dbh->prepare($sql);

$data[]=$id;

$stmt->execute($data);

$dbh=null;

}catch(exception $e){

print "メンテナンス中の為ご迷惑をおかけいたします";

print "<br>";

print "id変数の展開->";

print "$id";

print "<br>";

print $e; 

exit();
}

?>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

エラーをきちんと読めば見えてくることもあるかと思います。

 General error: 1366 Incorrect integer value: '' for column 'id' at row 1
Google翻訳:一般エラー:1366行1の列 'id'の整数値が不正です: ''

おそらくidの型がintegerなどの整数型で定義されているが、空文字が投入されたということなんでしょう。

エラーはもちろんですが、エラーメッセージの意味が分かったのであれば
そこから「どういう対策があるか」より、調査対象を自身のコードにした方が良いかと思います。
問題が起きているのは他でもない、自身のコードです。

良くコードを見てみましょう。

POST値を受け取っていますが

$id=$_POST["id"];

if内の式で上書きしています

if($id=""){

簡単に書くと、こう。

<?php
$a = "ああああああああああああああああああ";
if($a=""){}
echo $a;

ただ「未入力だったらエラーを出す」のはいいとして

if($id=""){

print "商品IDを入れてください"; 
print '<br>';

}


これだと、未入力でもこのエラーメッセージの文字列は出力されますが、
そのまま実行されますよ。

要件次第ですが、何かしらで処理の続行を止める必要があるのでは。
簡単にするなら、die()とかexit()ですね。

id変数の展開->で一度$id変数を表示してみましたがnull?みたいです
数字はinputで確認に入れたのですが... 

確認する場所間違ってます。
「POSTで情報が来ているか」なら$_POSTをvar_dump()です。
別の変数に代入されてますが、変数はPOSTからきた情報かどうかはプログラムは知りません。


蛇足:
5点

1点目:
コードインデントはきちんとされたほうが良いかと思います。
可読性の面で悪くなりますし、スコープも見えにくくなります。
改行しすぎもよろしくありません。
コードフォーマット機能のあるエディタ(IDEが良い)を利用しましょう。

2点目:

    $id = htmlspecialchars($id, ENT_QUOTES, "UTF-8");


DBにおさめる値なのであれば、HTMLエスケープしてはいけません。
「文字列の加工」にもなります。HTMLに表示するときのみ利用すべきです。
この直後に$idが空になるか確認していることから、「送信された情報」ではなく「PHPで加工した情報」に対するチェックになってしまっています。

type=numberの送信であること、空文字のチェックであることから
現状問題ないようには見えますが、この癖がつくと他のところで思わぬ穴に落ちます。

3点目:
細かいですが初期化してない配列にいきなり代入してます。

 $data[] = $id;


$data = [];
$data[] = $id;

4点目:
PDOなのであれば、PDOExceptionとするのが正確です。

}catch(exception $e){

5点目:

C:\MAMP\htdocs\database

Windows でMAMP
MacでXAMPP は悪手です。

teratailでもよくあがるお悩み相談です。
WindowsならXAMPP MacならMAMP で解決することも非常に多いです。
「どうしてもWindowsでMAMPでなければならない理由」ってないと思います。
だからと言って確かに「XAMPPでなければならない理由」もないのですが、
MAMPはWindowsに対して正規化されたものではないため、何か問題が起きた時に見つかる情報が少ないのです。

理想は、そういったOS関係なく利用できる仮想環境でLinuxでWebサーバーを立てることですね。LAMP環境が最も環境に左右されにくいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/10 11:40

    1
    「変数に値を代入した」という式の評価なので、型指定でもしてなければ評価結果はfalseになることは基本的にないからです。


    はい。合ってます。
    保管するデータは加工してはいけません。

    キャンセル

  • 2020/07/10 11:53

    >こちらについても
    本件未解決のままではよろしくないかと。

    キャンセル

  • 2020/07/10 13:28

    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.91%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る