ここから本文です

php にて mysqli_query() をつかってnull値が存在するテーブルを出力する場合どの...

bjidso34ds193da_091sdさん

2014/3/616:39:59

php にて mysqli_query() をつかってnull値が存在するテーブルを出力する場合どのようにしたらいいでしょうか?

こんにちは。

php で質問があります。

php にて mysqli_query() をつかってnull値が存在するテーブルを出力する場合どのようにしたらいいでしょうか?

以下のようにすると次のように出てしまいます。

$db = ('localhost', 'user', 'pass', 'database');
$query = "select * from table_name";

mysqli_query($db, $query)
-------

mysqli_query() expects parameter 1 to be mysqli, null given in ~


null値も含めたものを出力するにはどのようにすればいいでしょうか?

またnul値を含めるとセキュリティ的に危険なことはありますか?

回答お願いいたします。

補足雑な書き方大変申し訳ございませんでした。
$db = mysqli_connect(HOST, USER, PASS, DB_NAME);
if(mysqli_connect_errno()){printf(mysqli_connect_error()); exit(); }// エラーは出ていません。
$query = "SELECT * FROM TABLE_NAME";
$result = mysqli_query($db, $query);
//エラーが出ます。

読んでみます!
Mysqliクラスの項で 手続き型を採用すべき と書いてありますがオブジェクト指向型で書いたほうがいいのでしょうか?

閲覧数:
2,031
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

編集あり2014/3/617:45:28

コンストラクタも正しく書けていないようでは「出直してきて」って言われかねませんね…

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

Mysql関数はPHPマニュアルが公式に非推奨としていますが、Mysqliの手続き型の場合も同様に非推奨とさせていただきたいですね、個人的には。その理由は上記まとめ中にも記載したとおりです。オブジェクト指向でのコーディングを検討してください。

【Mysqli手続き型(コードが汚くなるので使わないでほしい)】
$db = mysqli_connect('localhost', 'user', 'pass', 'database');
if (mysqli_connect_errno()) { die(mysqli_connect_error()); }
mysqli_set_charset('utf8') or die(mysqli_error($db));
$result = mysqli_query($db, "select * from table_name") or die(mysqli_error($db));
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);

【Mysqliオブジェクト指向(こっちを使ってほしい)】
mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR);
try {
$db = new mysqli('localhost', 'user', 'pass', 'database');
$db->set_charset('utf8');
$rows = $db->query("select * from table_name")->fetch_all(MYSQLI_ASSOC);
} catch (mysqli_sql_exception $e) {
echo $e->getMessage();
}

【PDO(これが一番おすすめ)】
try {
$db = new PDO('mysql:dbname=database;host=localhost;charset=utf8', 'user', 'pass');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$rows = $db->query("select * from table_name")->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo $e->getMessage();
}

>> null値が存在するテーブルを出力する場合
>> null値も含めたものを出力するにはどのようにすればいいでしょうか?

なんか質問変わってませんか?MySQLのNULL値はPHPのNULL値として取り出されますよ。

>> またnull値を含めるとセキュリティ的に危険なことはありますか?

NULL文字とNULL値は全く異なるものであり、そういった危険性は全くありません。というかPHPの多くの関数はNULL文字を正しく処理できますので。


【追記】

>> $result = mysqli_query($db, $query);
>> //エラーが出ます。

$query = "SELECT * FROM TABLE_NAME";

というSQL文自体には文法的な誤りはないので、TABLE_NAME という名前のテーブルが存在していないとかでは…?また、次回からはエラー内容を貼るようにしてください。その方が的確なアドバイスが出来ます。文字数的にきついようであれば http://pastebin.comhttp://ideone.com などのサイトも活用してください。後者はコマンドラインからの実行も可能ですね。

>> Mysqliクラスの項で 手続き型を採用すべき と書いてありますがオブジェクト指向型で書いたほうがいいのでしょうか?

これはmysqli_report関数に関してのみの言及ですね。ここまでオブジェクト指向で書くと

$mysqli_driver = new mysqli_driver();
$mysqli_driver->report_mode = MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR;

のような設定方法になり、ぜんぜんしっくりこなくなってしまうと思います。 「$mysqli_driver と $db がどう関係あるんだよ!」って話ですよね。そんなことするぐらいなら

mysqli_report(MYSQLI_REPORT_STRICT | MYSQLI_REPORT_ERROR);

の方がいいんじゃないか?という意味です。他の部分はオブジェクト指向で書いてください。

質問した人からのコメント

2014/3/6 17:49:17

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

Qiita - PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

をよんでPDOクラスの勉強をして出直してきます。
また質問すると思います。 よろしくお願いします

ベストアンサー以外の回答

1〜1件/1件中

agunuzさん

編集あり2014/3/617:00:46

>$db = ('localhost', 'user', 'pass', 'database');

これ、何ですか(このままだとエラーになりますよね)。

>mysqli_query() expects parameter 1 to be mysqli, null given in ~

おそらく、$db が(接続リソースでなく)nullになっているというエラーだと思いますが、$dbがちゃんとconnect出来ているかチェックしていますか?


正直「null値が存在する」とかいう以前の問題だと思いますが、提示されているソースが中途半端なので何とも言えません。mysqli_queryの戻り値を変数に入れないと、ここから先の処理も書けない(fetchできない)だろうし・・・

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。