記録

2桁になると数字と文字でバグる非同期通信の穴。MYSQLめ!!

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>2桁になると数字と文字でバグる非同期通信の穴。MYSQLめ!!</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=10.0, user-scalable=yes">
  <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
  <script src="//code.jquery.com/jquery-1.10.2.js"></script>
  <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
  <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/i18n/jquery-ui-i18n.min.js"></script>
   <script>
  $(function() {
        hoge(0);
  });
  function hoge(cnt){
    $.ajax({
       type: "POST",
       url: "json.php",
       data:{
           cnt:cnt
       },
       dataType: 'json',
       success: function(obj){
           var cnt = Number(obj.cnt);
           var id_name = obj.id_name;
           $("#id_no").html(cnt);
           $("#id_name").html(id_name);
            if(id_name!=""){
                 hoge(++cnt);
             }else{
                 alert("もうねぇよ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!")
             }
       }
    });
  }
  </script>
</head>
<body>
No:<span id="id_no"></span>ID:NAME:<span id="id_name"></span>
</body>
</html>
<?php
//json.php
$cnt = $_POST["cnt"];
$link = mysql_connect('localhost', 'user', 'pass');
if (!$link) {
    die('接続失敗です。'.mysql_error());
}
$db_selected = mysql_select_db('database_name_hoge', $link);
if (!$db_selected){
    die('データベース選択失敗です。'.mysql_error());
}
//$result = mysql_query('SELECT * FROM where id_no =' . $cnt);
$result = mysql_query('SELECT * FROM where id_no =' . intval($cnt));
if (!$result) {
    die('クエリーが失敗しました。'.mysql_error());
}
$row = mysql_fetch_assoc($result);
$obj["id_name"] = $row['id_name'];
$obj["cnt"] = $cnt;
$json = json_encode($obj);
echo $json;

上記のソースはおそらく正しく動くであろうコードです。
このコードで何がしたいのかを解説していきます。
このHTML(index.html)が呼ばれたら(表示されたら)、
再帰処理がかかりPHPが動作してデータベースのテーブルから
主キーのid_no(int型)を検索しid_name(text型)を参照し
jsonで値を返して、受け取り表示するというものです。
簡単なプログラムですが、MYSQLに問い合わせをするときに
ちゃんとint型に変換してあげないと2桁なるとバグるという
問題が発生します!!
要するに0~9の間は参照してくれるのに
10になるとアレ・・・??
ってなり、参照してくれなくなるという
問題が発生します。
トイウコトデ・・・。
PHPやJQは案外いい加減な振る舞いをしてくれるけど
MYSQLは型の設定通り動作してくれるという
事なので注意が必要です。
ちなみに上記のコードが動作するかは未検証です(´Д`)

本気で生きてますか?前のページ

非同期通信の2重ループは素人にはオススメしません。次のページ

関連記事

  1. 記録

    コネクトする部分やプラットフォームの部分が!!

    コネクトする部分やプラットフォームの部分が儲けを出しやすいというのは…

  2. 記録

    情報セキュリティマネジメントの試験受かりました。

    情報セキュリティマネジメントの試験受かりました。簡単に受かるつもり…

  3. 記録

    Kindle Unlimited会員の方は読み放題でお楽しみいただけます。

    「Kindle Unlimited会員の方は読み放題でお楽しみいただ…

  4. 記録

    また、こんな所へ行くことになりそうだ。

    https://twitter.com/zip358com/statu…

  5. 記録

    オーテピア行ってきましたよ。

    オーテピア行ってきましたよ。感想はやはり綺麗ですね、良いなぁ…

  6. 記録

    この頃、超暑かったですが。

    この頃、猛暑が続きましたが暑いぐらいに来週あたりから徐々に温度…

PAGE TOP