質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1693閲覧

PHPからMSSQLを使ってデータを登録&結果情報を得たいです。

webkay

総合スコア8

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/06/26 10:43

MSSQLは初めてで困っています・・・
他社から提供されるMicrosoft SQL Serverのプロシージャを利用し、PHPからデータを登録したいです。
mssql_connectを使って接続は出来ている状態です。

$user_idを渡すと、結果として$resultと$inbound_numberが返ってくるプロシージャです。
下記のように処理を試していますが、結果として返ってくるはずの$resultと$product_numberに何も入ってないようです。

lang

1$stmt = mssql_init('proc_web_set_product_number', $conn); 2$user_id = 'email@gmail.com'; 3$result = ''; 4$product_number = ''; 5 6//値をバインド 7mssql_bind($stmt, '@USER_ID', $user_id, SQLVARCHAR, false, false, 32); 8mssql_bind($stmt, '@result', &$result, SQLVARCHAR, true, false, 4); 9mssql_bind($stmt, '@product_number', &$product_number, SQLVARCHAR, true, false, 64); 10 11$res = mssql_execute($stmt, true); 12 13do { 14 while ($row = mssql_fetch_assoc($res)){ 15 $results[] = $row; 16 } 17} while ( mssql_next_result($res) ); 18 19var_dump($results);//NULLが返ってきます。 20echo $product_number;//何も表示されません。 21echo $result;//何も表示されません。 22 23mssql_free_statement($stmt);

実は、データを登録するのにmssql_bindを使うのがあってるのかさえ
分からないまま試している状態なので、是非教えて頂けると嬉しいです。

サーバー:Microsoft SQL Server 2008 R2
PHP 5.2.6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

わたしがこれを確認するとしたら

1)初期化できているか確認する
$stmt = mssql_init('proc_web_set_product_number', $conn);
echo $stmt; // false じゃないことを確認する=初期化できてる

2)bindが成功していることを確認する
1行づつ
$status = mssql_bind($stmt, '@USER_ID', $user_id, SQLVARCHAR, false, false, 32);
echo $status; // false じゃないことを確認する
と戻り値を変数に格納させて表示してみる。

3)1行だけ取得してみる
いきなりループさせず、1行だけ取得して表示させてみる。
$row = mssql_fetch_assoc($res);
var_dump($row);

4)ループを確認する
whileの条件があってるか確認する。

と、上から順に確認していきます。

SQL-Serverを利用したことないのであまり詳細はわからないのですが、

2)のbindで変数の頭に"&"が付加されてるものとされてないものがあったり、
4)のWhileの条件ですぐ抜けてないか? がパッとみて、気になりました。

検証環境なく動作させられないので、このぐらいしか答えられません。
すみません。

投稿2015/06/26 12:07

kurosawa

総合スコア780

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

webkay

2015/06/28 09:27

回答頂きありがとうございます! 1. 以前試していて、falseではありません。 2.3.4. bindが成功していないため、戻り値も確認出来ていないと思います。mssql_bindの書き方自体が合ってるのかもわからないのが問題ですね^^; 情報をSELECTしてもらってるだけのプロシージャでのwhile文は上記のもので問題なくデータ表示できているので、組み合わせてみたのですが、やはりmssql_bindで成功していないと思います。 &がついている変数については mssql_bind($stmt, '@USER_ID', $user_id, SQLVARCHAR, false, false, 32); の「false, false, 32」部分の最初のfalseはプロシージャに渡す引数の役割をしてるみたいでして、 mssql_bind($stmt, '@result', &$result, SQLVARCHAR, true, false, 4); mssql_bind($stmt, '@product_number', &$product_number, SQLVARCHAR, true, false, 64); の「true, false, 4」と「true, false, 64」のtrueはoutputする値として$resultと$product_numberに吐き出されるものではないかと理解しています。 DB側の設定をちゃんとしてもらえていない可能性もあると、プロシージャを提供してくれてる会社に問い合わせてる最中です。
kurosawa

2015/06/29 12:39

返信遅れてすみません。なるほど、bindに失敗しているのですね。 &変数もマニュアルみたら参照渡しとのことなので、値をセットしてもらうためには&が必要ですね。 さて本題ですが、 1個目のbindは失敗してますか? メールアドレスを渡し、商品番号+その他情報を取得するようですが それならば、渡すのは$user_idだけで、結果は $res に格納されてませんか? (想像で言っています。違ってたらごめんなさい) // 条件をセット mssql_bind($stmt, '@USER_ID', $user_id, SQLVARCHAR, false, false, 32); // プロシジャ実行 $res = mssql_execute($stmt, true); // 結果セットを表示 while ($row = mssql_fetch_assoc($res)) { print_r($row); } で、期待の結果が返ってきませんかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問