phpのエラー「Undefined offset」

chrome拡張入れてみたが、クラスが見つからないとかいうエラーがでてドロキャスのアプレット動かない。しぃペインターは動く
昼過ぎ頃に呟いた「rubyでクラス内クラスを外部から直接new出来ない様にするには?」に関して、やっぱ解決したいと思ってさっきからまた調べてたら、 private_constant :<クラス名> ってのを見つけた~、これをやると直接newしようとしてもエラーになる。
…ユニバト負けた。 祈ってたらエラーになってタイトルに戻されるし、ヤオヨロズパーティーで攻めたら開幕無敵! Sクラスだと言うことを忘れてた。 クラリーチェとか、リディ来てくれないかな。
Pythonでは、プログラムの処理中にエラーが起こると例外が発生する。 Pythonにおいては例外もまた例外オブジェクトであり、何種類ものクラスが定義されている。 それらのクラスのスーパークラスはExceptionというクラスである。
Windows10って、エラーも吐かないくせに効かなくなってるクラスあるよなぁ...回避策なくて困る...だから他の人のプログラムも動作がおかしいわけだ。全然違う目的のプログラムなのに同じ症状だな。
結局シングルトン的なクラスで、インスタンスを返す代わりにデータメンバで用意した該当クラスの静的なスマートポインタを使ってポインタを返してて、エラーの原因はスマポがデストラクタがprivateでアクセス出来ないことだった…っていうか内容的に何で以前のVSというかVC++で通ったのか
エースと野手エラーと相手パワフル打線に完敗したゲーム 今年もホークスにはこてんぱんにされちゃうのか!? ホークスに勝てなきゃAクラス濃厚にはできない。 #西武ライオンズ
クラス作ってそこに変数押し込んだらエラーが出なくなった。よくわかってないけどまあ今はテスト中なので動けばよしということで
Javaさんは、もうスレッドセーフじゃないクラスをstaticに持たせたらコンパイルエラーにしていただきたい。
今朝一択彼女加藤恵の占いで百点満点中2点だった俺にあったことです ・朝食のパンが消滅 ・電車乗り過ごしかけた ・共同実験で失敗→クラスで一番最後に ・スロットで2000円溶かす&会員カード出ずエラー起こって定員もすぐ対応出来ない ・アイマスの高確率スロットでなかなか当らず 等々
"例外クラスでは、普通のクラスができることなら何でも定義することができますが、通常は単純なものにしておきます。大抵は、いくつかの属性だけを提供し、例外が発生したときにハンドラがエラーに関する情報を取り出せるようにする程度にとどめます。"
例外のexceptの直後に何も記述しないと全ての例外に対応可能だが、これはタイプミスやメモリエラーによる例外、sys.exit関数が呼び出されたことによる例外等本来の目的とは関係のない例外まで捕虜してしまう可能性があるので、避けるのが望ましく最上位の例外クラスを指定する方が良い。
サブクラスバグは、バグってたキャラのレベル上げたらクラスも特殊技も全て習得したので直ってる!通信時のエラーは怖くてチェックしてないなあ
#giantspp #giants 交流戦後が相性の良かった中日戦‼ 菅野&マイコラスの二枚看板先発‼ 勝手に「連勝もらった😊」そう思ったG党が多いかと。。。 それなのに。。。ア~それなのに😢 先制されたら21連敗だと~😠 今日もエラー絡み👊 こんなんじゃAクラスさえ危ういよ😓

経緯

初投稿
先日php7を自鯖に導入したところ mysql_connect 等のmysql関数が使えなくなった(削除されたっぽい)ので
mysqliクラスをラップして、簡単なDB操作クラスを作成してみました:thinking:
github:https://github.com/YasuakiHirano/phptools/tree/master/mysqli

mysql操作クラス

mysqli.lib.
<?php
class DBMysqli {

    private $mysqli;
    private $debugflg = false;
    private $logtype = 0;

    public function __construct($host, $username, $password, $dbname) {
        $this->mysqli = new mysqli($host, $username, $password, $dbname);
        if($this->mysqli->connect_error) {
            error_log($this->mysqli->connect_error , $this->logtype);
            exit;
        }
    }

    public function select($table, $column = '*', $where = '', $option = MYSQLI_ASSOC) {
      $this->emptyValidate(array('table' => $table));

      $sql = 'SELECT ';

      if(is_array($column)) {
        foreach($column as $value) {
            $sql .= $value.',';
        }

        $sql = substr($sql, 0,  -1); 
        $sql .= " FROM {$table}";

      } else {
        $sql .= "{$column} FROM {$table}"; 
      }

      if(!empty($where)) {
        $sql .= " WHERE {$where}"; 
      }

      if($this->debugflg) {
        $log = "execute sql:".$sql;
        error_log($log, $this->logtype);
      }

      $res = $this->mysqli->query($sql);
      if(!$res) {
         echo 'select error:'.$this->mysqli->error;
        if($this->debugflg) error_log($this->mysqli->error, $this->logtype);
        exit;
      }  

      $rows = null;
      while($row = $res->fetch_array($option)){
        $rows[] = $row;
      }

      return $rows;
    }

    public function insert($table, $column, $values = ''){
      $this->emptyValidate(array('table' => $table, 'column' => $column));

      $sql = "INSERT INTO {$table} ";
      $column_str = '(';
      $values_str = '(';

      if(is_array($column)) {
        foreach($column as $key => $value) {
          $column_str .= $key.',';

          if(is_string($value)){
            $values_str .= "'{$value}',"; 
          } else {
            $values_str .= $value.','; 
          }
        }
        $column_str = substr($column_str, 0,  -1).')'; 
        $values_str = substr($values_str, 0,  -1).')'; 

        $sql .= $column_str;
        $sql .= ' VALUES '.$values_str;

      } else {
        $sql .= " ({$column}) VALUES ({$values})"; 
      }

      if($this->debugflg) {
        $log = "execute sql:".$sql;
        error_log($log, $this->logtype);
      }


      $res = $this->mysqli->query($sql);
      if(!$res) {
        echo 'insert error:'.$this->mysqli->error;
        if($this->debugflg) error_log($this->mysqli->error, $this->logtype);
        exit;
      }  
      return $res;
    }

    public function delete($table, $where = ''){
      $this->emptyValidate(array('table' => $table));
      $sql = "DELETE FROM {$table} ";

      if(!empty($where)) {
        $sql .= "WHERE {$where}";
      }

      if($this->debugflg) {
        $log = "execute sql:".$sql;
        error_log($log, $this->logtype);
      }

      $res = $this->mysqli->query($sql);
      if(!$res) {
        echo 'delete error:'.$this->mysqli->error;
        if($this->debugflg) error_log($this->mysqli->error, $this->logtype);
        exit;
      }  
    }

    public function update($table, $column, $where = ''){
      $this->emptyValidate(array('table' => $table, 'column' => $column));

      $sql = "UPDATE {$table} SET ";
      if(is_array($column)) {
        foreach($column as $key => $value) {
          if(is_string($value)) {
            $sql .= "{$key} = '{$value}',";
          } else {
            $sql .= "{$key} = {$value},";
          }
        }
        $sql = substr($sql, 0,  -1); 

      } else {
        $sql .= "{$column}"; 
      }     

      if(!empty($where)) {
        $sql .= " WHERE {$where}"; 
      }

      if($this->debugflg) {
        $log = "execute sql:".$sql;
        error_log($log, $this->logtype);
      }

      $res = $this->mysqli->query($sql);
      if(!$res) {
         echo 'update error:'.$this->mysqli->error;
        if($this->debugflg) error_log($this->mysqli->error, $this->logtype);
        exit;
      } 
    }

    public function tranInsert($table, $column, $values = ''){
        $this->mysqli->autocommit(FALSE);

        try {
            if(!$this->insert($table, $column, $values)){
                throw new Exception('tranInsert error');
            }
        } catch(Exception $e) {
            $this->mysqli->rollback();
        }

        if($this->mysqli->commit()) {
            if($this->debugflg) error_log('commit failed', $this->logtype);
            exit();
        }

        $this->mysqli->autocommit(TRUE);
    }

    public function queryExec($sql){
      $res = $this->mysqli->query($sql);
      if(!$res) {
         echo 'queryExec error:'.$this->mysqli->error;
        if($this->debugflg) error_log($this->mysqli->error, $this->logtype);
        exit;
      } 

      return $res;
    }

    public function emptyValidate($data, $outname = '') {
      $error_message = '';
      if(is_array($data)) {
        foreach($data as $key => $value) {
          if(empty($value)){
            $error_message .=  "please input {$key}.";
          }
        }
      } else {
          if(empty($data)){
             $error_message .= "please input {$outname}.";        
          }
      }

      if(!empty($error_message)){
        echo $error_message;
        exit;
      }
    }

}

テスト用PHP

testmysqli.php
<?php
    require_once 'mysqli.lib.php';

    $password = 'pasword';
    $dbname = 'dbname';
    $user = 'root';
    $host = 'localhost';

    $mysqli = new DBMysqli($host, $user, $password, $dbname);

    // ## exec query
    $mysqli->queryExec("drop table hoge"); 
    $mysqli->queryExec("create table hoge(id int, name text, date_enterd datetime)"); 

    // ## insert test
    for($i = 0; $i < 10; $i++) {
        $insert_data = array(
               'id' => $i, 
               'name' => 'hoge'.$i,
               'date_enterd' => date('Ymd')
             );
        $mysqli->insert('hoge', $insert_data);
    }

    // ## select test
    // 1. table name only 
    $row = $mysqli->select('hoge');
    print_r($row);

    // 2. table and column name
    $row = $mysqli->select('hoge', array('id', 'name'));
    print_r($row);

    // 3. where
    $row = $mysqli->select('hoge', array('id', 'name'), "id in (1,2,3)");
    print_r($row);


    // ## delete test
    $mysqli->delete('hoge', "id in (0,1,2,3,4,5,6,7)");
    $row = $mysqli->select('hoge');
    print_r($row);

    // ## update test
    $mysqli->update('hoge', array('name' => 'update!!!', 'id' => '999'),"id in (8, 9)");
    $row = $mysqli->select('hoge');
    print_r($row);

雑ですが、ぱぱっと作った割にはいい感じかなと。。

[紹介元] PHPタグが付けられた新着投稿 – Qiita phpのエラー「Undefined offset」

  • コメント

    1. 匿名希望
      2017/06/23(金) 08:11:24

      chrome拡張入れてみたが、クラスが見つからないとかいうエラーがでてドロキャスのアプレット動かない。しぃペインターは動く

    2. 匿名希望
      2017/06/23(金) 08:11:24

      昼過ぎ頃に呟いた「rubyでクラス内クラスを外部から直接new出来ない様にするには?」に関して、やっぱ解決したいと思ってさっきからまた調べてたら、
      private_constant :<クラス名> ってのを見つけた~、これをやると直接newしようとしてもエラーになる。

    3. 匿名希望
      2017/06/23(金) 08:11:24

      …ユニバト負けた。
      祈ってたらエラーになってタイトルに戻されるし、ヤオヨロズパーティーで攻めたら開幕無敵!
      Sクラスだと言うことを忘れてた。
      クラリーチェとか、リディ来てくれないかな。

    4. 匿名希望
      2017/06/23(金) 08:11:24

      Pythonでは、プログラムの処理中にエラーが起こると例外が発生する。
      Pythonにおいては例外もまた例外オブジェクトであり、何種類ものクラスが定義されている。
      それらのクラスのスーパークラスはExceptionというクラスである。

    5. 匿名希望
      2017/06/23(金) 08:11:24

      Windows10って、エラーも吐かないくせに効かなくなってるクラスあるよなぁ…回避策なくて困る…だから他の人のプログラムも動作がおかしいわけだ。全然違う目的のプログラムなのに同じ症状だな。

    記事に戻る

関連記事