10096


現在`PHP`で`MySQL`から値を取得しようとしているのですが、値が空になってしまいます。  
サーバがローカルサーバを使っているので、それが原因かなと個人的に思っているのですが、関係はあるでしょうか？  
ちなみに下記のコードのSQL文を`phpMyAdmin`上で試してみると期待通りの結果が返ってきました。  
どなたか分かる方がいればどこが違うのか教えていただきたいです。すみませんが、よろしくお願いします。

[code]

    class Test{
    
        public function getData(){
    
            $mysqli = new mysqli($server, $user, $pass);
    
            if ($mysqli -> connect_errno) {
                echo $mysqli -> connect_error;
                exit();
            }
    
            $mysqli -> select_db('test');
            $mysqli -> set_charset("utf-8");
    
            $query = "SELECT * FROM word WHERE num = " .$this -> getNum();
            $result = $mysqli -> query($query);
    
            if (!$result) {
                $mysqli -> close();
                exit();
            }
    
            $data = array();
            while ($row = $result -> fetch_assoc()) {
                array_push($data, $row);
            }
    
            $result -> free();
            $mysqli -> close();
    
            return $data;
        }
    }
    
    $test = new Test();
    $data = $test -> getData(); 
    
    foreach ($data as $value) {
        var_dump($value['word']);
    }
    
[/code]

---追記---

結果が空になる原因が多分分かったと思います。  
`SELECT`文でint型の値を取得すると、出力結果に?と表示されました。  
そして文字列型の値を取得すると、出力結果は空でした。  
なので文字コード（？）とかそういったものが原因なのではないかと思います。  
仮に`SELECT * FROM
word`としてデータを全て取得すると、int型の値だけ?になりました。（なぜ出力結果がハテナになるのかもわかりませんが......）  
PHPの文字コードなどの設定もしてみたのですが、依然思った結果が得られていません。  
どうすればよろしいでしょうか？


CC BY-SA 3.0
2015-05-11T07:38:04.803
10035
2017-11-02T07:58:56.513
2015-05-13T01:53:23.217
5210
5210
question
php mysql
PHPでMySQLから取ってきた値が空になる


直接の回答でなくて恐縮ですが、  
[PHPのsprintfによるSQL組み立てで脆弱性が生じる例](https://ja.stackoverflow.com/questions/9484)  
[PHP での SQL
インジェクション対策はどのように行いますか？](https://ja.stackoverflow.com/questions/5053)  
この辺を参考にクエリの作成方法を見直した方が良いように思います。

本題としては、  
・各変数（$server, $user, $pass）に入っている値が正しいか  
・DBに接続できているか  
・処理がどこまで実行されているか  
あたりの確認からでしょうか。


CC BY-SA 3.0
2015-05-11T11:35:49.397
10049
2015-05-11T11:35:49.397
2017-04-13T12:52:38.920
-1
3516
10035
answer


私ならMySQLのクエリログを、確認しますね。  
phpMyAdminの時とPHPで書いた時と比較してみては、どうでしょうか。  
（むかーしむかし。私は、phpMyAdminで見ていたDBが間違っていた(USE先が違う)とか。接続先が間違っていた(ログが出なかった)というケアレスミスを、やらかしたことがあります）

-- 訂正 --  
「追記」の内容からすると。行は取得できているようなので。  
この確認作業は、おそらく不要です。（確認して損はありませんが有益かどうかというと疑問です）


CC BY-SA 3.0
2015-05-11T12:05:32.937
10050
2015-05-12T05:14:31.793
2015-05-12T05:14:31.793
8335
8335
10035
answer


問題が解決できました。

<http://kuroanco.hateblo.jp/entry/20130903/1378199119>

上記のサイトにあるように

[code]

    $db->query("set names utf8");
    
[/code]

と書いてあげると、出力結果が?になる問題と、SELECT文で条件を指定した時に出力結果が空になる問題が同時に解決されました。  
ご回答くださった皆様、誠にありがとうございました。


CC BY-SA 3.0
2015-05-13T03:00:43.437
10096
2015-05-13T03:00:43.437
5210
10035
answer