get_result関数を使用したく、PHPネイティブドライバをインストールしたいのですが、当方レンタルサーバを使用しております。
PHPはレンタルサーバに基本機能としてついており、php.iniなどもサーバ管理画面から編集します。
この場合、PHPネイティブドライバはインストールの可否判断含め、サーバ会社にインストールしてもらわなければならないのでしょうか?
(現在サーバ会社に問い合わせ中ですが、実は自分でインストールできるのではと希望が捨てきれずに質問させていただきました)
※ちなみにこちらのサイトにPHP5.3以上だと自動的に導入されていると記載があり、当方PHP7のため一応get_resultを実行したところ
php
1Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::get_result() in
とエラーになりました。やはりPHPバージョン関係なくドライバがないと使用できないのでしょうか。
また、現在ドライバをインストールしたいサイトは今後別のレンタルサーバに移行予定です。
レンタルサーバ毎に仕様が異なるPHPネイティブドライバの使用は避けるべきでしょうか?
よろしくお願いいたします。
追記1
実行したコードです。
php
1 $mysqli = new mysqli("localhost", "user", "password", "DB"); 2 3 /* 接続状況をチェックします */ 4 if (mysqli_connect_errno()) { 5 print_r('DB接続エラー<br>'); 6 printf("Connect failed: %s\n", mysqli_connect_error()); 7 exit(); 8 }else{ 9 print_r('DB接続成功<br>'); 10 } 11 12 //プリペアードステートメントを作成 13 $stmt = $mysqli->prepare("SELECT t.* FROM test t WHERE user_name = ?"); 14 //$stmt = $mysqli->prepare("SELECT t.col2 FROM test t WHERE user_name = ?"); 15 print_r('プリペア作成した<br>'); 16 17 if ($stmt) { 18 $u_name = 'テストユーザ1'; 19 20 /* マーカにパラメータをバインドします */ 21 $stmt->bind_param("s", $u_name); 22 print_r('バインド後<br>'); 23 24 /* クエリを実行します */ 25 $stmt->execute(); 26 print_r('実行後<br>'); 27 28 /* 結果変数をバインドします */ 29 //$stmt->bind_result($un); 30 $result = $stmt->get_result(); 31 print_r('結果バインド後<br>'); 32 33 /* 値を取得します */ 34 /*while ($stmt->fetch()) { 35 echo 'ユーザ名「 '.$un.'」<br>'; 36 }*/ 37 while ($row = $result->fetch_assoc()) { 38 echo 'ユーザ番号「 '.$row['col1'].'」<br>'; 39 echo 'ユーザ名「 '.$row['col2'].'」<br>'; 40 echo 'ユーザURL「 '.$row['col3'].'」<br>'; 41 echo 'ユーザ郵便番号「 '.$row['col4'].'」<br>'; 42 echo 'ユーザ都道府県「 '.$row['col5'].'」<br>'; 43 } 44 45 /*指定したステートメントハンドルの結果を格納したメモリを開放する*/ 46 $stmt->free_result(); 47 print_r('メモリ開放後<br>'); 48 49 /* ステートメントを閉じます */ 50 $stmt->close(); 51 print_r('ステートメント閉じ後<br>'); 52 53 }
※上記コードを実行すると
php
1/* クエリを実行します */ 2 $stmt->execute(); 3 print_r('実行後<br>');
の「実行後」までしか表示されません。
※上記コード中コメントアウトしてある以下のコードを使用すると最後まで正常実行され、ユーザ名も想定通りのものが表示されます。
php
1//$stmt = $mysqli->prepare("SELECT t.col2 FROM test t WHERE user_name = ?"); 2//$stmt->bind_result($un); 3/*while ($stmt->fetch()) { 4 echo 'ユーザ名「 '.$un.'」<br>'; 5 }*/
追記2
レンタルサーバはスターサーバです。
先ほど、現状スターサーバとしてmysqlndを提供していないし、自身で導入することもできない。と回答をいただきました。
追記3
MySQL関連の情報とは以下のような情報でよろしいでしょうか?
MySQL driver for PDO George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter
MySQLi Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel
MySQLnd Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter
回答2件
あなたの回答
tips
プレビュー