みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

mysqliについて

PHP初心者です

PHP 5.2.5
MySQL 5.1.22

レンタルサーバーのphpのバージョンが php5.2.5ではpdoがバグで使えないらしいのでmysqliを使おうとしています。PHP 5.2.5でもmysqliはバグありますか?

mysqliでMYSQLに接続するにはどうすればいいのでしょうか?
いままではこんな感じでしたがmysqliにするとどんなコードになるのでしょうか?




$link=mysql_connect('localhost', 'user', 'pass')or die(mysql_error());
mysql_select_db(user');
mysql_query('SET NAMES UTF8');

$start=1;
$hyouji=10;



$recordSet = mysql_query(sprintf('SELECT * FROM hoge2 ORDER BY id LIMIT %d, %d' , ',$start,$hyouji));


<?php
while ($table = mysql_fetch_assoc($recordSet)) {
?>
<tr>
<td><?php print($table['id']); ?></td>
<td><?php print($table['name']); ?></td>
</tr>
<?php
}
?>

投稿日時 - 2013-08-12 21:11:28

QNo.8216986

暇なときに回答ください

質問者が選んだベストアンサー

mysql_

mysqli_
に変えるだけでほとんど対応できます。
引数の順番が変わっていることはよくあるので、マニュアルでチェックしてください。
Google検索すればだいたい引っかかります。

投稿日時 - 2013-08-16 13:53:01

お礼

回答ありがとうございます
何とかmysqliで動くようになりました。ありがとうございました

投稿日時 - 2013-08-17 18:04:53

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(5)

> To_aru_Userさん
あ、確かにご指摘の通りですね。

むしろ、htmlspecialcharsがないことのほうが、問題あるかもね。

投稿日時 - 2013-08-12 23:59:25

補足

htmlspecialcharsはパフォーマンスのことを考えてデーターベースに入れる前に実行してます(使い方は間違っていますが)

投稿日時 - 2013-08-13 00:16:20

ANo.3

kosukejlampnetさんの回答に補足。

PDOでUTF-8を一貫して使用する分にはPHP5.2でも問題ありません。
しかし、オブジェクト生成時の文字セット指定の方法が異なるので注意してください。
http://me.beginsprite.com/archives/889

こちらで紹介しているリンクも参考にどうぞ。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10111723870

なお、指摘されている「PDOのバグ以前の話」について。
sprintfで%dを指定しており、(配列を含み)どんな値がPOSTされてもintに変換されるのでセキュリティホールはありません。

投稿日時 - 2013-08-12 23:31:10

お礼

いつも頼ってばっかりで申し訳ないのですが
質問にあるコードをmysqliで手続き型へ書き直していただけませんか?
素人なのでオブジェクト型はもう少し学んでからにします

投稿日時 - 2013-08-13 00:35:58

先の質問で指摘されたPDOのバグというのは↓の記事が出典だろうけど・・・。
http://www.tokumaru.org/d/20100701.html#p01

特殊な条件化で・・・。という条件付です。
一貫してUTF8を利用する場合には発生しない現象です。

ちょっと聞きかじった程度で十分に理解していない人も多いですからねぇ。
人の話を鵜呑みにせず、ご自身で検証することが何よりです。

ところで、質問文に書かれたコードを書いているようではPDOのバグ以前の話・・・。

$start=1;
$hyouji=10;
が絶対に固定なら問題ないけど、明らかにページングの処理ですよね。外部から来る値をエスケープなしに利用しているのは無施錠で外出するようなもの・・・。
あたかもドアに鍵をつけずに防犯カメラを買おうとしているみたいです。

サーバーの文字コードがUTF8でDBもUTF8で、ファイルの文字コードもUTF8であるなら素直にPDO使ったほうがよっぽど安全。

投稿日時 - 2013-08-12 23:07:04

お礼

PHPADMIN関係の文字コードはUTF8です。phpもUTF8です 
コアサーバーのデーターベースの文字コードがUTF8がありませんでした!なのでサーバーはEUC-JPになってます。(EUC-JP、UNICODE、SHIFT_JIS)の三つしかないです

文字化けはとくにないすが・・・


ご指摘のとおりページングです。しかし、回答者のためにコードを短くしました。

投稿日時 - 2013-08-13 00:14:10

ANo.1

まず、mysqliが使える環境かどうかはphpinfo()などで確認しておいてください

mysqliは手続き型とオブジェクト指向型に二種類のやり方があります。
とりあえずmysql関数からの移行がメインであれば手続き型でよいでしょう。
ほとんどのmysql関数をmysqliに書き換え、引数の順番を調整するだけで
さほど問題なく移植できると思います。

ただし手続き型は非推奨なのでできればオブジェクト指向型に変更された方がよいでしょう
詳しくはマニュアルを参照されると良い例がたくさん出ています

投稿日時 - 2013-08-12 21:46:58

お礼

回答ありがとうございます
素人なので簡単に導入できるなら手続き型でもいいのですがどうすればいいかわかりません
mysqlをmysqliにする・・だけはわかるんですが

投稿日時 - 2013-08-13 00:00:58

あなたにオススメの質問