TOMOYUKI-K
@TOMOYUKI-K

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

mysqlの型が勝手に変換されてしまいます

mysqlの方が勝手に変換されてしまいます

現在ローカルのxammp環境でとあるデータベース(NySQL)で処理を行うアプリを作っています。
ローカル環境では問題なかったのですがXserverのPHPサーバーにアップしたところ挙動が変わりました。

具体的には数値型として挿入した値が呼び出すときに勝手に文字列になってしまいました。

ソースコード

$sql = INSERT INTO drawing(hogehoge) values(:hogehoge);
try{
  $pdo->beginTransaction();
  $stmh = $pdo->prepare($sql); 
  $stmh->bindValue(':hogehoge',$_POST['hogehoge'],PDO::PARAM_INT);
  $stmh->execute();
  $pdo->commit();
}catch(PDOException $Exception){ 
  $pdo->rollBack();
  print "エラー/挿入できませんでした:".$Exception->getMessage();
}

(割愛)検索して結果を$stmhに格納

表示するところ
<?php foreach( $stmh as $row ) { ?>
 if($row['hogehoge'] !== 0){echo 'hogehoge:'.$row['hogehoge']." "; };

もしDB登録時にhogehogeを0としていたらif分の!==でスルーされてその後のecho分は処理されないはずです。
ローカル環境ではその様になったのですがXserver環境下では!==がtrueになってしまいechoが処理されます。

試しに以下の様に判定を文字列型にしたところなんとfalseになりました。
 if($row['hogehoge'] !== "0"){echo 'hogehoge:'.$row['hogehoge']." "; };

DBの作成時も上記の登録バインド時も数値型にしたのに呼び出すときにだけ文字列型になってしまいます。
ローカル環境では問題なかったのでXserverの問題なのかもしれませんがもしどなたか存じでしたら教えてください!!

因みにXserverは無料のPHPサーバーを使っております。

0

1Answer

こちらを見ると,String 型になるのがデフォルトの挙動のようです.

環境などでそうなるようですので確認してみるのはいかがでしょうか?

[補足]

こちらタイトルが「方」になっていて,「型」のことと気付きにくいので,
タイトルを編集した方が回答は付け易いかもしれません.

1Like

Comments

  1. @TOMOYUKI-K

    Questioner

    ご回答いただきありがとうございます!!
    やはり他にも同じ問題に出くわした方がいらしたのですね・・・
    ただいただいたリンクの内容ではうまくいかず・・
    もう少し調べて頑張ってみたいと思います!
    改めてありがとうございました。
    今後誤字もしっかり気をつけます!
  2. 解決には至らなかったようですが、がんばってください。

Your answer might help someone💌